Ребус: Возможно ли иметь несколько саг с одним и тем же типом IHandleMessages

Возможно ли иметь две или более саг, которые обрабатывают один и тот же тип сообщения?

Например, две саги, которые обе реализуют IHandleMessages? Это работает для всех хранилищ саги или только для некоторых из них?

Обновить:

Я проверил, у меня есть две саги (SendSMSSaga и SendEmailSaga), оба реализуют одни и те же IHandleMessages (отдельные команды IAmInitiatedBy), единственное, что происходит в первом дескрипторе:

  if (! IsNew) return; Data.Command = message; Data.Id = message.SagaId?? Guid.NewGuid (); Data.Status = Status.INIT; Data.LogRecordId = Extensions.CreateLogRecordId (); await Bus.SendLocalWithHeader (new CreateLogCompleteCommand () {SagaId = Data.Id, LogRecordId = Data.LogRecordId}); // SendSMSSaga защищенное переопределение void CorrelateMessages(ICorrelationConfig config)
        {
            config.Correlate(x => x.SagaId, y => y.Id);
            config.Correlate(x => x.SagaId, y => y.Id);
        }
//SendEmailSaga защищенное переопределение void CorrelateMessages (ICorrelationConfig config) {config.Correlate (x => x.SagaId, y => y.Id); config.Correlate (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.

1 ответ

Да, это возможно, и это работает для всех хранилищ саги (*).

Вы должны помнить, что данные каждой саги обновляются отдельно, поэтому, если, например, последнее обновление имеет ConcurrencyException, сообщение откатывается и будет получено снова.

Если это может вызвать проблемы для вас, вы должны сделать свои саги идемпотентными.


(*) В тот момент, когда Руне задал вопрос, он НЕ работал должным образом. В версиях Rebus < 0.99.68 была незначительная ошибка, которая не включала тип саги в критерии при корреляции по ID.

Это не было бы проблемой в большинстве случаев, потому что требовалось несколько обработчиков саги для обработки одного и того же сообщения, чтобы выявить ошибку.

Это было исправлено в 0.99.68 для всех пострадавших саг.

Другие вопросы по тегам