Как прослушать очередь, используя сервисную шину Azure с Node.js? - PullRequest
0 голосов
/ 04 июня 2018

Фон

У меня есть несколько клиентов, отправляющих сообщения в очередь Azure Service Bus.Чтобы соответствовать этому, мне нужно, чтобы несколько машин читали из этой очереди и использовали сообщения по мере их поступления, используя Node.js.

Research

Я прочитал учебник по очередям служебной шины Azure и я знаю, что могу использовать receiveQueueMessage для чтения сообщения из очереди.

Однако в учебнике не упоминается, как можно прослушивать очередь и читать сообщения, как только они приходят.

Я знаю, что могу просто опросить очередь на наличие сообщений, но это приводит к спаму.серверы с запросами, которые не приносят никакой пользы.

После поиска в SO я обнаружил обсуждение, в котором у кого-то возникла похожая проблема:

И я знаю, что они в конечном итоге использовали асинхронный метод C # ReceiveAsync, но мне не ясно, если:

  1. Этот метод доступен для Node.js
  2. Если этот метод читает сообщения из очереди, как только они поступают, как мне нужно.

Проблема

Документация для Node.js близка к несуществующей, и это единственное руководство, которое я нашел.

Вопрос

  1. Как мои сотрудники могут получать уведомления о входящем сообщении в очередях обслуживания шины Azure?

Ответы [ 3 ]

0 голосов
/ 03 февраля 2019

Я задал себе тот же вопрос, вот что я нашел.

Используйте Google PubSub, он делает именно то, что вы ищете.

Если вы хотите остаться с Azure, возможно следующее:

  • облачные функции могут быть вызваны из сообщений SBS
  • вызвать событие-концентратор событий с этимОблачная функция
  • получает событие и получает сообщение от SBS
0 голосов
/ 08 февраля 2019

Вы можете использовать функции без сервера, которые называются "ServiceBusQueueTrigger", они вызываются, как только сообщение приходит в очередь,

Это довольно просто делать в nodejs, вам нужны привязки, определенные в function.json, которыеиметь тип как

"тип": "serviceBusTrigger",

Эта статья (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger---javascript-example), вероятно, поможет более подробно.

0 голосов
/ 05 июня 2018

Ответ

Согласно поддержке Azure, невозможно получить уведомление, когда очередь получает сообщение.Это действительно для каждого языка.

Обходные пути

Существует два основных способа решения этой проблемы:

  1. Использование тем и подписок Azure.Таким образом, вы можете подписать всех клиентов на событие new-message и заставить их проверять очередь после получения уведомления.Однако у этого есть несколько проблем: во-первых, вам нужно оплатить еще одну службу Azure, а во-вторых, у вас может быть несколько клиентов, пытающихся прочитать одно и то же сообщение.

  2. Непрерывный опрос.Пусть клиенты проверяют очередь каждые X секунд.Это ужасное решение, так как вы платите за генерируемый вами сетевой трафик и спамите сервис бесполезными запросами.Чтобы свести к минимуму это, существует концепция, называемая long polling , которая настолько плохо документирована, что ее вполне может не существовать .Я нашел этот модуль NPM, хотя: https://www.npmjs.com/package/azure-awesome-queue

Альтернативы

Честно говоря, в этот момент вы можете задаться вопросом, почему вы должны использовать этот сервис. Я согласен ...

В качестве альтернативы есть RabbitMQ , который бесплатный, с сообществом, хорошей документацией и множеством других функций.

Недостатком является то, что обслуживание отказоустойчивого кластера RabbitMQ не совсем тривиально.

Другой альтернативой является Apache Kafka , который также очень надежен.

...