Rebus 如何与 Azure 服务总线主题配合使用?

Cra*_*rer 5 rebus

我是 Rebus 和 Azure 服务总线的新手,想了解 Rebus 如何处理 Azure 服务总线主题和队列。

我已经成功地让 Rebus 与 ASB 合作,但我对幕后发生的事情感到有些困惑。

我有一个配置 Rebus 的 ASP.NET Core 应用程序,如下所示:

services.AddRebus(configure => configure
    .Logging(l => l.Serilog())
    .Transport(t =>
        {
            switch (messagingConfig)
            {
                case MessagingConfig.RabbitMq:
                    t.UseRabbitMqAsOneWayClient(messagingConnectionString);
                    break;
                case MessagingConfig.AzureServiceBus:
                    t.UseAzureServiceBusAsOneWayClient(messagingConnectionString);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        })
    .Routing(r => r.TypeBased().Map<BaseMessage>("publisher"))
);
Run Code Online (Sandbox Code Playgroud)

我还有一个订阅消息的控制台应用程序,配置如下:

using (var activator = new BuiltinHandlerActivator())
{
    activator.Register(() => new Handler());

    Configure.With(activator)
        .Logging(l => l.ColoredConsole(minLevel: LogLevel.Warn))
        .Transport(t =>
        {
            switch (BusConfig)
            {
                case MessagingConfig.RabbitMq:
                    t.UseRabbitMq(RabbitMqConnectionString, "consumer");
                    break;
                case MessagingConfig.AzureServiceBus:
                    t.UseAzureServiceBus(AzureServiceBusConnectionString, "subscriber");
                    break;
            }
        })
        .Start();

    Console.WriteLine($"Listening for messages on {BusConfig}...");
    Console.WriteLine("Press ENTER to quit");

    activator.Bus.Subscribe<AdditionalSessionRequestMessage>().Wait();
    activator.Bus.Subscribe<AcceptInvoiceMessage>().Wait();

    Console.ReadLine();

    Console.WriteLine("Quitting...");
}
Run Code Online (Sandbox Code Playgroud)

当我查看 Azure 门户时,我看到为我的每个消息子类(我有两个)创建了一个主题,我看到创建了一个名为“订阅者”的队列。

据我推测,似乎我可以在 Azure 门户中配置一个服务总线,Rebus 将根据需要为每种消息类型创建主题。类似地,订阅应用程序将根据需要创建一个输入队列。

我只是想验证一下我的理解是否正确。