2 votes

Comment écouter une file d'attente en utilisant azure service-bus avec Node.js ?

Contexte

J'ai plusieurs clients qui envoient des messages à une file d'attente du bus de service Azure. Pour y répondre, j'ai besoin de plusieurs machines qui lisent cette file d'attente et consomment les messages à mesure qu'ils arrivent, en utilisant Node.js.

Recherche

J'ai lu le tutoriel sur les files d'attente du bus de service azur et je suis conscient que je peux utiliser receiveQueueMessage pour lire un message de la file d'attente.

Cependant, le tutoriel ne mentionne pas comment on peut écouter une file d'attente et lire les messages dès qu'ils arrivent.

Je sais que je peux simplement interroger la file d'attente pour obtenir des messages, mais cela bombarde les serveurs de demandes sans aucun avantage réel.

Après avoir cherché dans SO, j'ai trouvé une discussion où quelqu'un avait un problème similaire :

Et je sais qu'ils ont fini par utiliser la méthode async de C# ReceiveAsync mais je ne vois pas bien si :

  1. Cette méthode est disponible pour Node.js
  2. Si cette méthode lit les messages de la file d'attente dès qu'ils arrivent, comme j'en ai besoin.

Problème

La documentation pour Node.js est pratiquement inexistante, ce tutoriel étant le seul document important que j'ai trouvé.

Question

  1. Comment mes employés peuvent-ils être informés de l'arrivée d'un message dans les files d'attente des services du bus azur ?

2voto

Flame_Phoenix Points 5559

Réponse :

Selon le support Azure, ce n'est pas possible pour être notifié lorsqu'une file d'attente reçoit un message. Ceci est valable pour toutes les langues.

Contournements

Il existe deux solutions principales pour résoudre ce problème :

  1. Utilisez les sujets et les abonnements Azure. De cette façon, tous les clients peuvent être abonnés à un événement. new-message et demandez-leur de vérifier la file d'attente lorsqu'ils reçoivent la notification. Cette solution présente toutefois plusieurs problèmes : d'abord, vous devez payer un autre service Azure et ensuite, plusieurs clients peuvent essayer de lire le même message.

  2. Polling continu. Demandez aux clients de vérifier la file d'attente toutes les X secondes. Cette solution est horrible, car vous finissez par payer le trafic réseau que vous générez et vous spammez le service avec des demandes inutiles. Pour aider à minimiser cela, il existe un concept appelé long sondage qui est si peu documenté qu'il pourrait tout aussi bien ne pas exister. . J'ai cependant trouvé ce module NPM : https://www.npmjs.com/package/azure-awesome-queue

Alternatives

Honnêtement, à ce stade, vous vous demandez peut-être pourquoi vous devriez utiliser ce service. Je suis d'accord...

Comme alternative, il y a RabbitMQ qui est gratuit, possède une communauté, une bonne documentation et une tonne de fonctionnalités supplémentaires.

L'inconvénient est que la maintenance d'un cluster RabbitMQ tolérant aux pannes n'est pas exactement triviale.

Une autre alternative est Apache Kafka qui est également très fiable.

0voto

Delcon Points 518

Je me suis posé la même question, voici ce que j'ai trouvé.

Utilisez Google PubSub, il fait exactement ce que vous recherchez.

Si vous souhaitez rester avec Azure, les possibilités suivantes s'offrent à vous :

  • les fonctions cloud peuvent être déclenchées à partir de messages SBS
  • déclencher un événement de type "hub" avec cette fonction "cloud".
  • recevoir l'événement et récupérer le message à partir de SBS

0voto

Navin Mistry Points 1

Vous pouvez utiliser des fonctions sans serveur qui sont des "ServiceBusQueueTrigger", elles sont invoquées dès que le message arrive dans la file d'attente,

C'est assez simple à faire dans nodejs, vous avez besoin de liaisons définies dans function.json qui ont un type comme

"type" : "serviceBusTrigger",

Cet article ( https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger---javascript-example ) permettrait probablement d'obtenir plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X