Корреляция саги NServiceBus с ConversationId - PullRequest
1 голос
/ 11 октября 2019

В настоящее время у меня есть несколько саг, которые передают пользовательский CorrelationId для базового класса сообщений. Все события и команды наследуются от этого базового класса и поэтому имеют легкий доступ к CorrelationId. В результате сопоставления ConfigureHowToFindSaga выглядят примерно так:

protected override void ConfigureHowToFindSaga(SagaPropertyMapper<MySagaData> mapper)
{
     mapper.ConfigureMapping<MyCommand>(message => message.CorrelationId)
        .ToSaga(sagaData => sagaData.CorrelationId);   

    mapper.ConfigureMapping<MyEvent>(message => message.CorrelationId)
        .ToSaga(sagaData => sagaData.CorrelationId);    
} 

На каждом шаге саги (и других служб, с которыми общается саги) настраиваемый идентификатор CorrelationId в настоящее время вручную сопоставляется из сообщения всообщение вот так:

   public Task Handle(MyCommand message, IMessageHandlerContext context)
   { 
      // do something 

      return context.Publish(new MyEvent { CorrelationId = message.CorrelationId });
   }

Мне было интересно, смогу ли я использовать заголовок сообщения NSB ConversationId для замены пользовательского CorrelationId, так как я считаю, что NSB уже сопоставляет это от сообщения к сообщению автоматически.

У меня было два вопроса, касающихся этого:
1. Это звучит разумно?
2. Если да, есть ли простой способ настроить ConfigureMappingотображения, чтобы сага читала из context.MessageHeaders[Headers.ConversationId], а не напрямую из свойства в теле сообщения? Я понимаю, что мог бы написать собственный SagaFinder, чтобы копаться в заголовках и получать ConversationId и использовать его, чтобы затем найти сагу. Тем не менее, я подумал, что если мне нужно сделать это для каждой саги, то, возможно, весь подход неверен. Спасибо

1 Ответ

2 голосов
/ 11 октября 2019

Намерение свойства saga mapping состоит в предоставлении уникального идентификатора Saga из бизнес-аспекта, т. Е. Банковской транзакции, идентификатора заказа, Claidid или другого примера, который может быть идентификатором кредита. так что передача технического идентификатора звучит так, будто вы идете не в том направлении ...

Какова ваша бизнес-история для этих саг?

...