首页 文章

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

提问于
浏览
2

我试图找出如何监听队列中的事件(尤其是入队事件) .

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

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

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

谢谢 .

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

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

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

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

2 回答

  • 1

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

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

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

  • 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有一个很棒的教程 .

相关问题