在 Azure ServiceBus 上使用 MassTransit 时如何在 saga 中使用指定主题

How to use a specified topic in a saga when using MassTransit on Azure ServiceBus

我希望针对特定传奇的所有消息都发生在同一主题上。

我的 saga 是这样设置的:

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));

我希望在主题 'myTopic' 上发布 SecondMessage,但 MassTransit 为此消息创建了一个新主题。

MassTransit 为每种消息类型创建一个主题,并将消息发布到相应的主题。不建议将相同的主题名称分配给多种消息类型。

如果您想为 saga 使用订阅端点,则需要为每个事件在相应主题上配置 saga。默认情况下,MassTransit 会将每个 saga 事件的消息主题转发到接收端点队列。

示例拓扑如下所示: