在Azure ServiceBus上使用MassTransport时如何在传奇中使用指定主题传奇、主题、如何在、Azure

2023-09-03 10:46:58 作者:24.无病呻吟

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

我是这样设置我的传奇故事的:

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);
            });
        });
    });
}
Azure Services Bus 服务总线 中的工作流 workflow

我在状态机中执行以下操作:

Initially(
   When(FirstEvent)
   .PublishAsync(context => context.Init<SecondMessage>(new { TestParam = "test"}))
   .TransitionTo(FirstState));

我希望在主题‘myTheme’上发布Second Message,但MassTransport却为此邮件创建了一个新主题。

推荐答案

MassTransport为每个邮件类型创建一个主题,并将邮件发布到相应的主题。建议不要将同一主题名称分配给多个邮件类型。

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

示例拓扑如下所示: