在需要时在CQRS中提供同步行为?

use*_*351 5 asp.net-mvc nservicebus cqrs

我正在使用带有NServiceBus的ASP.NET MVC,并且尽管绝大多数命令都可以在最终的一致性中执行,但是只有少数任务可以立即实现一致性.

我已经对用于实现这一目标的各种方法进行了大量研究,但很少有人提出任何理由来说明为什么这种特殊方法更可取.我在生产环境中没有任何NSB经验,所以知道任何方法是否以任何方式限制可扩展性也是很好的.

以下是我遇到的方法: -

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

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

我假设答案不是主观的,并且适合使用NServiceBus来实现CQRS中的命令基础结构比其他更好.

谢谢.

Ebe*_*oux 1

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

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