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

时间:2013-08-10 11:02:11

标签: asp.net-mvc nservicebus cqrs

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

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

以下是我遇到的广泛方法: -

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

有没有比上述三个更好的选项,如果有,为什么?如果没有,上面三个中的哪一个更好,为什么?

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

因此,对于绝对 具有100%一致性而非调用相同任务对象而不是发送命令以供稍后处理的情况。 可能仍然需要该命令用于其他方案。