gpt4 book ai didi

synchronization - Rebus - 发送命令并等待处理程序

转载 作者:行者123 更新时间:2023-12-03 18:10:43 24 4
gpt4 key购买 nike

我正在尝试使用 CQRS/ES 架构设置 WebApp。
我已经定义了一个模型实体,带有创建和编辑命令/事件。
命令由相关的 Saga 处理。
事件被保存到一个 mongo 事件存储,这是立即一致的存储。
事件由写入最终一致的 SQL 存储的非规范化器处理。

现在我面临着来自 WebApp 的应该同步 CRUD 操作的问题:用户打开一个包含这些实体列表的页面,从最终一致的 SQL 存储中读取。最初它是空的。
然后,用户编译表单以添加新实体。客户端对向总线发出 Create 命令的方法执行 ajax 调用,然后返回 void。

成功回调后(确实如此,因为发出命令没有问题)客户端刷新实体列表。如果 denormalizer 仍然没有处理实体 Created 事件,并写入最终一致的 SQL 存储,页面仍将显示一个空列表。
我想要的是一种使发出 Create 命令的方法等待非规范化器的方法。

我读了很多博客和东西,我明白这样的同步与使用总线的想法背道而驰……但是这样的用户操作需要同步:如何向用户显示“插入成功!”然后仍然看到一个空列表?

我希望得到答案,因为这个用例对我来说似乎很基础......

最佳答案

前阵子写了一篇关于这个确切主题的博客文章。我提供了 4 种可能的解决方案。

  • 禁用和刷新 - 这里的想法是禁用提交后的编辑字段,直到指定的时间段过去。我个人不喜欢这种方法,因为它会造成糟糕的用户体验,并且根据完成读取模型更新的时间可能仍然无法正常工作。
  • 使用确认屏幕 - 这是流程结束屏幕的理想选择。像“谢谢您的订单”或类似的。
  • Fake It - 这是一个不错的选择。它基于这样一个事实,即未能收到异常或验证错误表明成功。因此,您可以假设读取模型的新状态。我在生产中使用了这种方法并且工作得很好。您需要小心版本号。它还提供了出色的用户体验。如果由于某种原因操作失败,您可以稍后通知用户。这种方法还假设您对域内的验证和检查进行了彻底的检查。它还有助于使读取模型更新尽可能简单。
  • 轮询 - 正如已经建议您可以使用轮询或订阅读取模型。我也使用过这种方法,但将其与选项 3 结合使用。它适用于 React 等框架。

  • 你可以在这里阅读完整的帖子: 4 Ways to Handle Eventual Consistency

    关于synchronization - Rebus - 发送命令并等待处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262408/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com