是否可以有两个或多个Sagas处理相同的消息类型?
例如,两个都实现IHandleMessages的传奇?这是否适用于所有传奇存储或仅适用于其中一些存储?
更新:
我已经测试过我有两个传奇(SendSMSSaga和SendEmailSaga)都实现了相同的IHandleMessages(单独的IAmInitiatedBy命令),第一个句柄中唯一发生的事情是:
如果(!是新的)返回; 数据命令 = 消息; Data.Id = 消息。萨加伊德 ??Guid.NewGuid(); Data.Status = Status.INIT; Data.LogRecordId = Extensions.CreateLogRecordId(); await Bus.SendLocalWithHeader(new CreateLogCompleteCommand() { SagaId = Data.Id, LogRecordId = Data.LogRecordId });发送短信传奇protected override void CorrelateMessages(ICorrelationConfig config) { 配置。相关(x => x.SagaId, y => y.Id); 配置。相关(x => x.SagaId, y => y.Id); }发送电子邮件佐贺 protected override void CorrelateMessages(ICorrelationConfig config) { 配置。相关(x => x.SagaId, y => y.Id); 配置。相关(x => x.SagaId, y => y.Id); }
然后我得到以下异常:
5 个未处理的异常:13.07.2016 10:26:30 +02:00:System.ArgumentException:类型为"Unipluss.Sign.Notification.Queue.Saga.Email.SendEmailSagaData"的对象无法转换为类型"Unipluss.Sign.Notification.Queue.Saga.SendSMSSagaData"。
关于我做错了什么的任何提示?我已经尝试了SQL和新的AzureStorage传奇实现。
是的,这是可能的,它适用于所有 saga 存储(*)。
您需要记住,每个传奇的数据都是单独更新的,因此,例如,如果最后一次更新遇到ConcurrencyException
,则消息将回滚并再次收到。
如果这会给您带来问题,您应该确保使您的 sagas 幂等。
(*) 在 Rune 提出问题时,它没有正常工作。Rebus 版本 0.99.68 <中存在一个细微的错误,当按>
在大多数情况下,这不是问题,因为它需要多个 saga 处理程序来处理相同的消息才能暴露错误。
它已在 0.99.68 中修复了所有受影响的传奇持续者。