【问题标题】:Providing synchronous behaviour in CQRS when needed?需要时在 CQRS 中提供同步行为?
【发布时间】:2013-08-10 11:02:10
【问题描述】:

我正在使用带有 NServiceBus 的 ASP.NET MVC,由于绝大多数命令都可以在考虑到最终一致性的情况下执行,因此有一小部分任务似乎可以通过即时一致性来简化事情。

我对用于实现此目的的各种方法进行了大量研究,但很少有人提出任何理由来说明为什么该特定方法更可取。我在生产环境中没有任何使用 NSB 的经验,因此如果有任何方法以任何方式限制可扩展性,我也很高兴。

以下是我遇到的大致方法:-

  • 不同步,将信息伪造回客户端。我对此的保留首先是,您必须处理伪造数据并且命令失败的情况(不太可能的情况)等等重要的是,如果命令中任何数据的初始化很复杂,那么伪造这些数据的能力无论如何都不一定可行。
  • 任务完成后回复(或发布事件以供客户端接收)。我对此的保留是这意味着分布式架构变得更加复杂,我不确定负载平衡客户端是否会导致问题,因为只有一台客户端计算机应该收到回复。
  • 轮询读取存储,直到数据出现。我对此的保留是它使读取存储比其他选项承受更多负载。

有没有比上述三个更好的选择,如果有,为什么?如果不是,以上三个哪个更好,为什么?

我假设答案不是主观的,其中一个更适合使用 NServiceBus 在 CQRS 中实现命令基础架构。

谢谢。

【问题讨论】:

  • 只是不要将 CQRS 用于同步部分。没有规定一旦开始使用 CQRS 就必须使用它。海事组织,拥抱欧共体。如果您引入任何类型的同步操作,那么您在可扩展性方面注定要失败。 PS。 NSB 是双重许可的,只是提醒一下。

标签: asp.net-mvc nservicebus cqrs


【解决方案1】:

我对此的看法是,实际端点不应该执行工作,而是将其交给某个“任务”(应用程序服务/操作脚本)对象。 那个对象正在立即执行工作。

因此,对于您绝对必须具有 100% 一致性而不是调用同一个任务对象而不是发送命令供以后处理的情况。您可能在其他情况下仍需要该命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 2021-05-13
    • 2023-03-19
    • 1970-01-01
    • 2020-06-05
    • 2020-07-26
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多