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

Php 在PROOPH中通过投影创建的读取模型中等待新记录,php,cqrs,event-sourcing,prooph,Php,Cqrs,Event Sourcing,Prooph,我使用prooph(),所以我有我的写模型,在这里我存储事件,如下所示(聚合表): 使用命令在后台运行投影时: php bin/console event-store:projection:run card_projection 我读过如下模型: 在我的后台应用程序前面有rest API,我在其中创建事件: CardWasAdded 通过url: POST /cards GET /cards 我收到代码201 之后,我通过url刷新我的列表: POST /cards GET /ca

我使用prooph(),所以我有我的写模型,在这里我存储事件,如下所示(聚合表):

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

php bin/console event-store:projection:run card_projection
我读过如下模型:

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

CardWasAdded
通过url:

POST /cards
GET /cards
我收到代码201

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

POST /cards
GET /cards
问题是,有时这个新事件不是通过投影处理的。 因此,问题是:

如何处理该问题?

  • 我应该等2秒钟还是一段时间?(对我来说是个难看的黑客)
  • 我是否应该在插入事件后处理事件-不在后台使用投影过程

  • 我的回答不是针对prooph的,但以下是一些您可以在任何CQRS系统中使用的策略:

  • 只需接受读取模型不完全一致的事实(什么也不做)。示例-当我在Twitter上发布内容时,我可能不会立即在流中看到我的帖子,这是可以的。它最终会出现在那里
  • 乐观的用户界面更新。只需更新UI,就像您的命令已通过一样。如果不是,那也没什么大不了的。比如说Twitter上的一些东西。你不需要等待确认。如果类似失败-其状态将随下一次读取模型刷新而出现
  • 在API端点处等待。您的API被调用,您发出一个命令,并寻找特定的读取模型更新发生。超时失败
  • 在UI级别等待。您发送一个命令并显示一些“等待”的UI元素,直到您的查询返回您要查找的内容,或者在超时时失败

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

    谢谢您的回答

    最后,我接受了读取模型有延迟的事实

    在我的RESTAPI中,当我发布新资源时,我返回201和json以及新创建的Id等等。 我的前端应用程序基于来自POST新资源(POST/card)的响应,将新记录作为新行添加到数据表中,并带有“new”标记

    当用户刷新列表时,读取模型已准备就绪(因为创建新记录所需时间不超过1秒)

    最后,对于用户来说,记录是否来自

    邮递/明信片

    得到/得到卡片


    因此,用户体验很好

    是@RomanEremin的完美答案。在prooph的示例应用程序中,您发现应用了策略1,请参见应用程序本身接受读取模型更新可能需要更长时间这一事实。在这种情况下,它会通知用户并请求刷新页面。