0

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

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

    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 代替。

任何帮助都会很棒。

4

1 回答 1

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 调用上有许多附加选项可用于说明应如何处理消息,但这种方法可能会奏效。

于 2016-06-20T14:58:31.697 回答