我正在使用带有 NServiceBus 的 ASP.NET MVC,并且由于绝大多数命令可以在考虑到最终一致性的情况下执行,因此有一小部分任务可以立即一致性来简化事情。
我已经对用于实现此目的的各种方法进行了大量研究,但很少有人提出任何理由来说明为什么该特定方法更可取。我在生产环境中没有任何使用 NSB 的经验,因此如果有任何方法以任何方式限制可扩展性,我也很高兴。
以下是我遇到的大致方法: -
- 没有同步,将信息伪造回客户端。 我对此的保留首先是,您必须处理伪造数据并且命令失败的情况(不太可能发生的情况),更重要的是,如果命令中任何数据的初始化很复杂,那么伪造的能力无论如何,这个数据不一定是可行的。
- 任务完成时回复(或发布要由客户端接收的事件)。 我对此的保留是,这意味着分布式架构变得更加复杂,我不确定负载平衡客户端是否会导致问题,因为只有一台客户端机器应该收到回复。
- 轮询读取存储,直到数据存在。 我对此的保留是它使读取存储比其他选项承受更多的负载。
有没有比上述三个更好的选择,如果有,为什么?如果不是,以上三个哪个更好,为什么?
我假设答案不是主观的,其中一个更适合使用 NServiceBus 在 CQRS 中实现命令基础架构,而不是其他的。
谢谢。