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

Multiple Background Workers with different azure bus subscriptions

我创建了一个可以读取 azure 总线服务订阅的工作人员,遵循在线示例。 但是无法找到一种方法让多个工作人员在同一个应用程序中阅读不同的订阅并做不同的事情。

为了创建我的应用程序,我已将以下内容添加到我的 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 }

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

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

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

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

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 }