doufu6196 2018-08-20 09:29
浏览 27
已采纳

在PROOPH中通过投影创建的读取模型中等待新记录

I use prooph(https://github.com/prooph) so I have my write model, where I store events like below(aggregate table):

Write model

when I run projection in background using command:

php bin/console event-store:projection:run card_projection

I have read model like below:

Read model

In front of my background application I have rest API, where I create event:

CardWasAdded

through url:

POST /cards

and I receive code 201.

After that I refresh my list through url:

GET /cards

The issue is that sometimes this new event is not processed by projection. So the question is:

How to manage that issue?

  1. Should I wait 2 sec or some time?(ugly hack for me).
  2. Should I process event after is inserted - not use projection process in background?
  • 写回答

2条回答 默认 最新

  • dtnat80842 2018-08-20 12:01
    关注

    My answer is not prooph specific, but here are some strategies you may use in any CQRS system:

    1. Just accept the fact read-model is not imeediately consistent (do nothing). Example - when I post something to Twitter, i may not immediately see my post in the stream and this is ok. It will appear there eventually.
    2. Optimistic UI update. Just update UI as if your command went through. If not - not a big deal. Example - Like something on Twitter. You don't need to wait for confirmation. If somehow like failed - its status will come with next read model refresh.
    3. Wait at the API endpoint. Your API was called, you issue a command, and look for particular read model update to happen. Fail on timeout.
    4. Wait at UI level. You send a command and display some "Waiting" UI element until your query returns what you are looking for, or fail on timeout.

    With strategy 3 and 4 you may use some kind of server signaling - sockets or something like this. Your read model might be able to confirm it was updated.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号