收听队列(事件驱动无轮询)服务总线/存储队列

时间:2015-10-26 00:03:03

标签: azure azureservicebus servicebus azure-servicebus-queues azure-queues

我正在试图弄清楚如何监听队列中的事件(尤其是入队事件)。

假设我有控制台应用程序和服务总线队列/主题,如何连接到队列并等待新消息?

我正在尝试在没有While(true)和常量轮询的情况下实现这一点,我正试图以一种非常倾听的方式做到这一点,就像一个保持连接到队列的套接字。

我不想使用轮询的原因是我明白它会使服务器充满请求,我需要一个能够在很大负载下运行的解决方案。

谢谢。

我为问题的简单性提供了非常基本的例子,但我的实际情况有点复杂:

我的Web-API使用Service Bus Queue将需要处理的消息发送到Worker角色。

我需要以某种方式知道工作人员何时处理了该消息。 我希望Worker向队列发送消息,警告Web API已处理消息,但现在我需要让Web-API“坐下”并等待Worker的响应,这引出了我的问题:

如何在不进行轮询的情况下持续监听队列(因为有很多实例会汇集,并且会产生很多可能最好避免的请求。

2 个答案:

答案 0 :(得分:1)

使用Azure WebJobs SDK - 它具有使用简单代码监视队列和blob的触发器:

public static void Main()
{
    JobHost host = new JobHost();
    host.RunAndBlock();
}

public static void ProcessQueueMessage([QueueTrigger("webjobsqueue")] string inputText, 
    [Blob("containername/blobname")]TextWriter writer)
{
    writer.WriteLine(inputText);
}

What is the Azure WebJobs SDK有一个很棒的教程。

答案 1 :(得分:1)

我最终使用QueueClient.ReceiveAsync为了等待带有Timespan参数的消息。

            BrokeredMessage msg = subClient.ReceiveAsync(TimeSpan.FromMinutes(3));

这是一篇很好的文章,解释了Azure Service Bus linkService Bus best practice的大部分内容。