MassTransit AzureServiceBus 生成的队列

MassTransit AzureServiceBus generated queues

我有一个 MT 设置的工作配置,它托管在 Azure Service Fabric 解决方案中。

我有一个发送消息的 API 和一个读取消息的无状态应用程序。

在无状态应用程序中,我告诉它使用以下类型的 TestMessage 消息:

container.Register(Classes.FromThisAssembly().BasedOn<IConsumer>());
var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
        {
            var h = cfg.Host(new Uri("sb://xxxxx.servicebus.windows.net"), host =>
            {
                host.OperationTimeout = TimeSpan.FromSeconds(5);

                host.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "******");
            });

            cfg.ReceiveEndpoint(h, "fabric-test", ec =>
            {
                ec.UseMessageScope<ConsumeContext>();
                ec.LoadFrom(_container);
            });
        });

并且在 API 中我指定了 fabric-test 队列并发送:

var p = await _bus.GetSendEndpoint(new Uri("sb://xxxxx.servicebus.windows.net/fabric-test"));

await p.Send(new TestMessage(Guid.NewGuid()));

而且一切都很好 - 然而。

当我查看 Azure 门户时,我可以看到已创建 3 个队列和 1 个主题:

虽然这一切都有效我想知道这是什么?

stateless1 是您的服务结构总线实例,即为该总线创建的临时队列。 webapi1 是你的web api 总线实例,用于发送到无状态服务,也是一个临时队列。 fabric-test 是您的接收端点的服务队列。 namespace.core.testmessage 是您的消息类型,由您的服务端点订阅。

这都是由 MassTransit 构建的,以支持您正在使用的消息结构。临时队列在 5 分钟后消失,不用担心 - 它们只是用于寻址和维护与 ASB 的连接。

如果 发布了 那种类型的消息,就会创建主题,以便您的服务端点接收它。如果您不想为特定服务端点的消息类型订阅主题,您可以在该端点的配置中指定 SubscribeMessageTopics = false。`