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

Listen to Queue (Event Driven no polling) Service-Bus / Storage Queue

我想知道如何监听队列中的事件(尤其是入队事件)。

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

我正在尝试在没有 While(true) 和持续轮询的情况下实现这一点,我正在尝试以一种非常听众的方式做更多的事情,比如保持连接到队列的套接字。

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

谢谢。

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

我有 Web-API 使用服务总线队列将需要处理的消息发送到工作者角色。

我需要以某种方式知道 Worker 何时处理了消息。 我希望 Worker 向队列发送一条消息,提醒 Web API 已处理该消息,但现在我需要创建 Web-API "sit" 并等待响应工人回来了,这引出了我的问题:

我如何在不进行轮询的情况下不断地收听队列(因为有很多实例会合并,它会创建很多请求,最好避免。

使用 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 上有很棒的教程。

我最终使用 QueueClient.ReceiveAsync 来等待带有时间跨度参数的消息。

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

这是一篇很好的文章,解释了 Azure 服务总线的大部分内容 link and Service Bus best practice