Rabibitmq – Comment envoyer des messages tardifs / planifiés à WebHooks avec le support SI?

Je voudrais utiliser RabbitMQ pour envoyer des notifications WebHook aux clients avec SI déclin s’ils ne recevaient pas de notifications.

Rabibitmq - Comment envoyer des messages tardifs / planifiés à WebHooks avec le support SI?

Il existe de nombreux cas d’utilisation de messages programmés ou tardifs, et je voulais utiliser RabbitMQ pour envoyer des notifications Web aux clients qui sont promus à Si s’ils ne recevaient pas de notifications.

Cependant, RabbitMQ utilise un protocole AMQP qui n’a pas de fonctionnalité d’origine pour envoyer des messages planifiés ou en retard. Mais il existe des moyens de mettre en œuvre ceci:

  1. Utilisez le programme d’assistant communautaire rabbitmq_delayed_message_exchange ((L’environnement de production n’est pas recommandé))
  2. Utilisez l’échange de messages morts avec un message TTL.

Jetons un coup d’œil au programme assistant pour la société d’abord.


Si vous souhaitez sauter pour implémenter, vous pouvez lire cet article. Si vous ne vous souciez pas beaucoup du temps, vous pouvez avancer dans cette solution très simple. Mais vous devez réfléchir à deux fois avant de l’utiliser dans l’environnement de production.

Vous pouvez passer à l’entrepôt GitHub avec le composant supplémentaire et vérifier les restrictions. Lors de la rédaction de ce blog, il contient certaines restrictions qui peuvent apporter des contradictions à votre demande:

Si quelque chose arrive au serveur RabbitMQ ou le redémarrer, vos paramètres de temps sont perdus. Cela signifie que si vous définissez le message à envoyer après une minute, une heure ou peut-être un jour, et qu’il est supprimé sur votre serveur, les messages sont consommés dès que le serveur apparaît.

J’ai trouvé que l’échange de lettres mortes avec le message TTL est bien meilleur que ce programme auxiliaire (bien sûr, il y a certaines restrictions mais au moins cette approche apporte plus de cohérence).


Utilisation de l’échange de lettres mortes avec le message TTL

Pour comprendre cette approche, vous devez vérifier les liens ci-dessus pour comprendre ces deux éléments. Je voudrais résumer l’approche ici.

Il nécessite des listes d’attente (invitons-les primary queue et waiting queue) Et 1 échange. Pour un cas privé Webhoks, j’ai décidé d’utiliser cette approche:

  1. Continuez à pousser les messages vers la liste d’attente de base.
  2. Essayez d’envoyer la notification aux clients immédiatement.
  3. Si vous n’obtenez pas de succès, ajoutez TTL et poussez-le vers waiting queue.
  4. Après le TTL spécifié, les messages seront envoyés à primary queue Utiliser l’échange et peut être consommé pour réessayer.
  5. Continuez à augmenter le TTL après chaque essai pour obtenir un soutien ASY dans un état d’échec.

Si vous ne souhaitez pas l’envoyer immédiatement, vous pouvez ignorer les deux premières étapes et entrer les messages directement dans la liste d’attente.

Maintenant, si nous dessinons un schéma, cela ressemblera à ceci (Ne soyez pas submergé par ce dessin de planification):

Pour garder cela simple et direct, je ne veux pas corriger avec une certaine langue. Au lieu de cela, j’utiliserai le panneau d’information de gestion.


Implémentation à l’aide du panneau d’information de gestion

Étape 1: Créez un hôte virtuel

Après vous être connecté à la carte d’information de gestion, créez un hôte virtuel si vous ne le faites pas déjà. Je préfère généralement créer un hôte virtuel car il fournit un assemblage logique et séparer les ressources.

Ici, j’ai créé un hôte virtuel appelé: my-host.

Étape 2: Créez un échange

Maintenant, allez à Exchanges Tab et “Ajouter un nouvel échange”.

  1. Sélectionnez l’hôte virtuel: my-host Ou tout hôte virtuel que vous venez de créer à l’étape 1.
  2. Ajoutez le nom de votre échange. Ici, je l’ai mis my-exchange.
  3. Changer le type en topic. (Discussion sur le type d’échange en dehors de la portée de ce blog)

Étape 3: Créer des listes d’attente

Comme nous en avons discuté ci-dessus, nous devons créer 2 files d’attente. Pour faire ça, allez à Queues L’onglet et “Ajouter une nouvelle liste d’attente”.

Dans la première liste d’attente, il vous suffit de former ces deux champs:

  1. Hôte virtuel: my-host
  2. nom: primary-queue

Dans la deuxième liste d’attente,

  1. Hôte virtuel: my-host
  2. nom: waiting-queue
  3. Pour ajouter des arguments, cliquez Dead letter exchangeDéfinissez la valeur: my-exchange.
  4. Faire un clic Dead letter routing keyDéfinissez la valeur: primary.

Étape 4: Préparer des liens d’échange pour des conseils

Après avoir créé ces 2 listes avec succès, passez à nouveau à Exchanges L’onglet et cliquez sur la bourse que nous avons créée à l’étape 2. Dans mon cas, c’est my-exchange.

Développez maintenant Bindings Ajouter les détails suivants:

  1. À la liste d’attente: primary-queue
  2. Clé d’orientation: primary

C’est ça.

Testons notre composition

Pour voir si cette direction fonctionne correctement, nous publierons un message à waiting-queue Avec TTL de 10 secondes. Cela signifie que le message n’attendra que 10 secondes, puis transféré à primary-queue.

Publier un message à la file d’attente pour attendre

Aller à Queues Onglet et cliquez waiting-queue. Développez maintenant la section “Publier Message” et ajoutez les détails suivants:

  1. Dans “caractéristiques”, ajouter expiration Et définir sa valeur 10000 (10 secondes). Cela signifie que le message restera en attente de 10 secondes.
  2. Ajoutez n’importe quel message dans la section “Charge”. Ici, j’ai mis “Hello World!”.

un écran

Maintenant, cliquez à nouveau sur Queues Facture non rémunérée. Si vous ne voyez pas de messages dans waiting-queueMettez à jour la page. Si vous créez tout correctement, et après 10 secondes, vous verrez que le même message est maintenant primary-queue.


Pour obtenir un support asiatique, vous pouvez simplement augmenter le temps de l’expiration du message dans chaque tenue.

Une erreur courante

Créer une seule liste d’attente

Tout en atteignant le déclin de Si, si vous continuez à augmenter le temps d’expiration et à répandre les messages à la liste d’attente en attente, vous remarquerez que parfois vos paramètres de temps ne fonctionnent pas correctement.

Si vous avez lu message TTL Le lien que vous avez partagé au début, il y a une section: chaque message TTL est des avertissements. Tu dis que Vos messages expireront et iront à la lettre morte en attendant uniquement lorsque vous atteignez le haut de la liste d’attente.

Par exemple, j’ai publié un message avec un temps d’expiration – une heure. Maintenant, si vous publiez un message sur la liste d’attente en attente avec le moment de l’expiration d’une minute, le deuxième message (avec le temps d’expiration 1 minute) ne se terminera que (et vous déménagerez sur la liste des artisans morts) après une heure.

Après avoir créé ces valeurs et joué avec ces valeurs dans le panneau d’information de gestion, vous pouvez facilement corder avec n’importe quelle langue que vous souhaitez. Si vous aimez ce sujet et l’article, dites-moi que gazouillement Et l’échange de connaissances avec tout le monde.



Source Link

Scroll to Top