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

时间:2016-06-06 23:34:26

标签: azureservicebus azure-servicebus-queues webjob

我目前正致力于一个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。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

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

您可以通过不使用trigger属性来完成此操作,而是启动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调用上有许多其他选项可以处理消息,但这种方法可能有效。