5

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

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

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

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

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

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

谢谢。

4

1 回答 1

1

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

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

于 2013-08-12T05:34:11.883 回答