Rebus:是否有可能拥有具有相同IHandleMessages类型的多个Sagas



是否可以有两个或多个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 中修复了所有受影响的传奇持续者。

相关内容

  • 没有找到相关文章

最新更新