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

Waiting for new record in read model created by projection in PROOPH

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

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

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

我读过如下模型:

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

CardWasAdded

至url:

POST /cards

我收到代码 201。

之后我通过 url:

刷新我的列表
GET /cards

问题是投影有时不会处理这个新事件。 所以问题是:

如何解决这个问题?

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

我的回答并不具体,但这里有一些您可以在任何 CQRS 系统中使用的策略:

  1. 只接受读取模型不是立即一致的事实(什么也不做)。示例 - 当我 post 向 Twitter 发送某些内容时,我可能不会立即在流中看到我的 post,这没关系。它最终会出现在那里。
  2. 乐观UI更新。只需更新 UI 就好像您的命令已通过一样。如果不是-没什么大不了的。示例 - 在 Twitter 上点赞。您无需等待确认。如果不知何故失败 - 它的状态将在下次读取模型刷新时出现。
  3. 在 API 端点等待。你的 API 被调用,你发出一个命令,并寻找特定的读取模型更新发生。超时失败。
  4. 在 UI 层等待。您发送命令并显示一些 "Waiting" UI 元素,直到您查询 returns 您正在寻找的内容,或者超时失败。

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

谢谢罗曼的回答。

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

在我休息时api当我POST新资源我return201和json新创建的ID等等。 我的前端应用程序,基于 POST 新资源(POST /card)的响应,将新记录添加到数据 table 作为新行,带有 "NEW" 徽章。

当用户刷新列表时,读取模型就绪(因为建立新记录不到 1 秒)。

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

没有区别

POST/卡片

获取/卡片

所以用户体验很好