我目前正致力于一个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。
任何帮助都会很棒。
答案 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调用上有许多其他选项可以处理消息,但这种方法可能有效。