Azure WebJob 处理配置中设置的多个服务总线队列

Azure WebJob process multiple service bus queues that are set in configuration

我目前正在研究一个解决方案,其中 webjob 监视服务总线队列。这很好用,但它需要很容易适应以管理任意数量的队列,只需更改配置中的队列列表即可。

目前我可以看到我可以这样做:

    public static void ProcessQueueMessage1([ServiceBusTrigger("queue1")] BrokeredMessage message, TextWriter log)
    {

    }

对于另一个队列,我需要添加另一个方法:

    public static void ProcessQueueMessage2([ServiceBusTrigger("queue2")] BrokeredMessage message, TextWriter log)
    {

    }

很明显,我不想每次需要监视新队列时都添加新方法。

我将如何使用 WebJob 来监视名称在我的配置中的任何队列?我的意思是队列名称列表,而不仅仅是配置中的一个。

例如,我知道我可以使用 QueueNameResolver 来执行以下操作:

    public static void ProcessQueueMessage([ServiceBusTrigger("%nameInCofig%")] BrokeredMessage message, TextWriter log)
    {}

但我真的想只用一个 WebJob ProcessQueueMessage 方法处理一个队列名称列表。

我找了好久,快要改用 WorkerRole 了。

任何帮助都会很棒。

我也很好奇为什么您有多个队列由相同的方法处理 - 可能有更好的设计模式和方法...但是...

您可以通过不使用触发器属性来完成此操作,而是启动 Web 作业主机并使用一些代码迭代配置文件中指定的队列,为每个队列连接具有相同 OnMessage 操作的客户端一。像这样:

.
.
.
var factory = MessagingFactory.CreateFromConnectionString("");
foreach (var queue in queues)
{
    var client = _factory.CreateQueueClient(queue);
    client.OnMessage(OnMessageReceived, options);
}
.
.
.

public void OnMessageReceived(BrokeredMessage message)
{
     // do your work
}

QueueClient 和 OnMessage 调用中有许多其他选项用于处理消息,但这种方法可能有效。