【发布时间】:2020-07-17 09:01:11
【问题描述】:
我不明白 saga 并发消息的目的。我希望它表现得更像一个演员。因此,所有具有相同CorrelationId 的消息都是按顺序处理的。 saga 的全部目的是编排一个长时间运行的进程,那么为什么并行消息处理很重要呢?
您能举一个合法的例子,说明与顺序模式相比,为 saga 实例并发处理消息是有益的吗?
还是我理解错了,并发仅仅意味着几个不同的saga实例并行运行?
问的原因是来自NServiceBusdocs的这个片段:
避免从外部资源访问数据的主要原因是saga state的可能争用和不一致。根据持久化器,可检索 saga 状态并使用悲观或乐观锁定进行持久化。 如果事务花费的时间太长,则可能会出现另一条与同一个 saga 实例相关的消息。它可能在不同的(并发)线程(或者可能是横向扩展的端点)上处理,并且它要么立即失败(悲观锁定),要么尝试保持状态(乐观锁定)。在这两种情况下,消息都会被重试。
【问题讨论】: