Я использую MassTransit Sagas. Он запускается, когда входящее событие (AccountCreatedInWebAppEvent) выполняет некоторую обработку, а затем публикует другое событие (SagaAccountCreatedEvent)
У меня есть потребитель, который прослушивает SagaAccountCreatedEvent, но для потребителя context.CorrelationId равен нулю, если я не установленэто явно, как в примере ниже (вернуть новый SagaAccountCreatedEvent () {...}). Не следует ли включить корреляцию без необходимости вставлять ее в сообщение с помощью магии саги? (то же самое относится к публикации от потребителя к Saga- «обработчику»)
InstanceState(i => i.CurrentState);
Event(() => AccountCreatedInWebAppEvent, e => e.CorrelateBy<int>(sagaState => sagaState.AccountId, context => context.Message.Account.AccountId)
.SelectId(context => Guid.NewGuid()))
...
Initially(
When(AccountCreatedInWebAppEvent)
.Then(context =>
{
context.Instance.AccountId = context.Data.Account.AccountId;
context.Instance.CreatedInWebApp = DateTime.Now;
})
.TransitionTo(AccountCreatedSentOut)
.Publish(context =>
{
return new SagaAccountCreatedEvent() { Account = context.Data.Account, CorrelationId = context.CorrelationId.Value };
})
Метод-потребитель
public async Task Consume (Контекст ConsumeContext) {
//here context.correlationId is null
}