具有不同 Azure 总线订阅的多个后台工作人员

Posted

技术标签:

【中文标题】具有不同 Azure 总线订阅的多个后台工作人员【英文标题】:Multiple Background Workers with different azure bus subscriptions 【发布时间】:2021-05-04 22:58:45 【问题描述】:

我创建了一个可以读取 azure bus service subscription 的工作人员,以下示例在线。 但是无法找到一种方法让多个工作人员在同一个应用程序中读取不同的订阅并执行不同的操作。

为了创建我的应用,我在 Program.cs 中添加了以下内容

services.AddSingleton<ISubscriptionClient>(x =>
                        new SubscriptionClient(Configuration["ServiceBus:ConnectionString"],
                                                Configuration["ServiceBus:TopicName"],
                                                Configuration["ServiceBus:SubscriptionName"]));

在我的工人中:

private readonly ISubscriptionClient _subscriptionClient;

在 ExecuteAsync 中

_subscriptionClient.RegisterMessageHandler(async (message, token) => 
         //do stuff 

有没有办法让每个后台工作人员使用不同的订阅?

【问题讨论】:

【参考方案1】:

您可以在工作角色中创建只读全局变量,而不是将ISubscriptionClient 作为 Singleton 注入(在这种情况下不推荐服务解析器,因为它不能完全解决您的问题),如下所示:

private readonly ISubscriptionClient _subscriptionClient1 = new SubscriptionClient(Configuration["ServiceBus:ConnectionString1"],
                                                Configuration["ServiceBus:TopicName1"],
                                             Configuration["ServiceBus:SubscriptionName1"]));

private readonly ISubscriptionClient _subscriptionClient2 = new SubscriptionClient(Configuration["ServiceBus:ConnectionString2"],
                                                Configuration["ServiceBus:TopicName2"],
                                                Configuration["ServiceBus:SubscriptionName2"]))

然后,在ExecutionAsync 中使用它们:

_subscriptionClient1.RegisterMessageHandler(async (message, token) => 
         //do stuff 
_subscriptionClient2.RegisterMessageHandler(async (message, token) => 
         //do stuff 

【讨论】:

【参考方案2】:

您需要以Configuration["ServiceBus:TopicName"]Configuration["ServiceBus:SubscriptionName"] 不是“硬编码”的方式注册您的客户。

this answer 中描述的服务解析器可以工作,您的实现类将这两个参数作为构造函数参数。

【讨论】:

以上是关于具有不同 Azure 总线订阅的多个后台工作人员的主要内容,如果未能解决你的问题,请参考以下文章

Azure 服务总线主题订阅者接收订单

使用azure服务总线,如何将单个消息发布到多个队列?

具有相同订阅的服务总线多个侦听器实例未接收消息

我们如何使用管道将azure devops中的应用程序部署到具有不同订阅和组织的azure app服务

Azure 服务总线 - 订阅者可以独立订阅订阅并共享相同的消息?

Service Fabric Actor 订阅 Azure 服务总线主题