【问题标题】:How to listen to a queue using azure service-bus with Node.js?如何使用带有 Node.js 的 azure service-bus 收听队列?
【发布时间】:2019-02-08 17:30:41
【问题描述】:

背景

我有几个客户端将消息发送到 azure 服务总线队列。为了匹配它,我需要几台机器从该队列中读取并在消息到达时使用 Node.js。

研究

我已经阅读了azure service bus queues tutorial 并且我知道我可以使用receiveQueueMessage 从队列中读取消息。

但是,本教程没有提到如何在消息到达后立即收听队列并读取消息。

我知道我可以简单地轮询队列中的消息,但这会向服务器发送垃圾邮件请求并没有真正的好处。

在SO中搜索后,我发现有人遇到类似问题的讨论:

我知道他们最终使用了 C# 异步方法 ReceiveAsync,但我不清楚是否:

  1. 该方法适用于 Node.js
  2. 如果该方法在消息到达后立即从队列中读取消息,就像我需要的那样。

问题

Node.js 的文档几乎不存在,该教程是我找到的唯一主要文档。

问题

  1. 如何通知我的工作人员 Azure 总线服务队列中的传入消息?

【问题讨论】:

  • 我并没有真正使用 Azure,但在使用 AWS SQS 时遇到了同样的问题。我相信唯一的方法是轮询消息,因为它是长时间轮询,您可以打开连接并等待相当长的时间直到连接终止。也许这个用于 SQS 的 npm 包的代码将帮助您在 Node.js 中实现它 - github.com/bbc/sqs-consumer

标签: node.js azure azureservicebus azure-servicebus-queues


【解决方案1】:

回答

根据 Azure 支持,不可能在队列收到消息时收到通知。这对每种语言都有效。

解决方法

这个问题有两个主要的解决方法:

  1. 使用 Azure 主题和订阅。这样,您可以让所有客户端订阅事件new-message,并让他们在收到通知后检查队列。但是,这有几个问题:首先您必须为另一个 Azure 服务付费,其次您可以让多个客户端尝试读取相同的消息。

  2. 连续轮询。让客户端每 X 秒检查一次队列。这个解决方案很糟糕,因为你最终支付了你产生的网络流量,并且你用无用的请求向服务发送垃圾邮件。为了帮助减少这种情况,有一个名为 long polling 的概念,它文档记录太差,它可能不存在。我确实找到了这个 NPM 模块:https://www.npmjs.com/package/azure-awesome-queue

替代方案

老实说,此时您可能想知道为什么要使用此服务。 我同意...

作为替代方案,RabbitMQ 是免费的,具有社区、良好的文档和更多功能。

这里的缺点是维护一个 RabbitMQ 容错集群并非易事。

另一种选择是Apache Kafka,它也非常可靠。

【讨论】:

    【解决方案2】:

    我问了我同样的问题,这是我发现的。

    使用 Google PubSub,它完全符合您的要求。

    如果你想继续使用 Azure,以下是可能的:

    • 可以通过 SBS 消息触发云功能
    • 使用该云功能触发事件中心事件
    • 接收事件并从 SBS 获取消息

    【讨论】:

      【解决方案3】:

      您可以使用“ServiceBusQueueTrigger”等无服务器功能, 一旦消息到达队列,它们就会被调用,

      它在 nodejs 中非常简单,您需要在 function.json 中定义类型为

      的绑定

      "type": "serviceBusTrigger",

      这篇文章 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger---javascript-example) 可能会提供更详细的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-18
        • 2016-02-19
        • 1970-01-01
        • 2015-01-07
        • 2017-10-04
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多