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

Ark*_*sky 1 php cqrs event-sourcing prooph

我使用了prooph(https://github.com/prooph),所以我有了写模型,在其中存储了如下所示的事件(聚合表):

写模型

当我使用命令在后台运行投影时:

php bin/console event-store:projection:run card_projection
Run Code Online (Sandbox Code Playgroud)

我读过如下模型:

读取模型

在后台应用程序的前面,我有rest API,在其中创建事件:

CardWasAdded
Run Code Online (Sandbox Code Playgroud)

通过网址:

POST /cards
Run Code Online (Sandbox Code Playgroud)

我收到代码201。

之后,我通过url刷新列表:

GET /cards
Run Code Online (Sandbox Code Playgroud)

问题在于,有时无法通过投影处理此新事件。所以问题是:

如何解决这个问题?

  1. 我应该等待2秒还是一段时间?(对我来说很丑)。
  2. 插入后是否应该处理事件-不在后台使用投影处理?

Rom*_*min 5

我的答案不是特定于Prooph的,但以下是您可以在任何CQRS系统中使用的一些策略:

  1. 只需接受事实,即读取模型并不完全一致(不执行任何操作)。示例-当我在Twitter上发布内容时,我可能不会立即在流中看到我的帖子,这是可以的。它将最终出现在那。
  2. 乐观的用户界面更新。只需更新UI,就好像您的命令通过了一样。如果没有-没什么大不了的。示例-喜欢Twitter上的内容。您无需等待确认。如果以某种方式失败,则其状态将随下次读取模型的刷新一起出现。
  3. 在API端点处等待。调用了您的API,发出命令,然后寻找特定的读取模型更新。超时失败。
  4. 在用户界面级别等待。您发送命令并显示一些“等待” UI元素,直到查询返回您要查找的内容或超时失败。

使用策略3和4,您可以使用某种服务器信令-套接字或类似的东西。您的读取模型可能能够确认它已更新。