Я хотел бы, чтобы все сообщения для конкретной саги происходили по одной и той же теме.
Я настроил свою сагу так:
public void ConfigureServices(IServiceCollection services)
{
services.AddMassTransit(x =>
{
var machine = new MyStateMachine();
var repository = new InMemorySagaRepository<MyState>();
x.UsingAzureServiceBus((ctx,cfg) => {
cfg.Host(config.ServiceBusConnectionString);
cfg.SubscriptionEndpoint("mySub", "myTopic", e =>
{
e.StateMachineSaga(machine, repository);
});
});
});
}
В государственной машине я делаю это:
Initially(
When(FirstEvent)
.PublishAsync(context => context.Init<SecondMessage>(new { TestParam = "test"}))
.TransitionTo(FirstState));
Я хотел бы, чтобы SecondMessage был опубликован в теме «myTopic», но вместо этого MassTransit создает новую тему для этого сообщения.
MassTransit создает тему для каждого типа сообщения и публикует сообщения в соответствующих темах. Не рекомендуется назначать одно и то же имя темы нескольким типам сообщений.
Если вы хотите использовать конечную точку подписки для саги, вам потребуется настроить сагу в соответствующей теме для каждого события. По умолчанию MassTransit будет пересылать темы сообщений для каждого события саги в очередь конечной точки получения.
Пример топологии показан ниже: