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



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

为了创建我的应用程序,我添加了以下代码到我的Program.cs

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

and in my worker:

private readonly ISubscriptionClient _subscriptionClient;

在ExecuteAsync

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

是否有一种方法可以让每个后台工作人员使用不同的订阅?

您可以在worker角色中创建只读全局变量,而不是将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 }

您需要以这样一种方式注册您的客户端,即Configuration["ServiceBus:TopicName"]Configuration["ServiceBus:SubscriptionName"]不是"硬编码"的。

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

最新更新