Skip to content

WIP:Connexion perdue à RabbitMQ

Alexandre Moevi requested to merge fix/lost-amqp into develop

Déconnexion des moteurs Go quand la connexion au serveur RabbitMQ est perdue.

Issue: nil

Tests

Lancer un ou plusieurs moteurs Go puis arrêter ou redémarrer RabbitMQ (systemctl stop rabbitmq-server ou systemctl restart rabbitmq-server). Les moteurs Go devraient afficher un message de log puis s'arrêter.

Notes

Le comportement existant est que quand la connexion à RabbitMQ est perdue, l'objet amqp.Channel existe toujours. Quand on interroge cet objet, il nous renvoie un amqp.Delivery, ce que le moteur Go attend de manière normale, mais ses propriétés sont vides.

Le but de ce fix est de vérifier que l'objet amqp.Delivery analysé soit ce qu'il devrait être. Si le contenu du Delivery n'est pas vide, alors il est donné au moteur comme d'habitude. Sinon, on regarde dans les propriétés du Delivery. Si cet objet contient un Exchange vide (au lieu de canopsis.events par exemple), alors on sait que la connexion au RabbitMQ est perdue et on arrête le moteur.

Si on veut changer le comportement du moteur pour gérer la reconnexion au RabbitMQ, il faudra modifier plusieurs fonctions critiques des moteurs Go, dont routineWorker et StartEngine. Ce sera un travail de fond et sur la durée ; ça rejoint l'idée d'il y a quelques mois de retravailler de manière globale les moteurs (entre autres [SPEC] Gestion de la configuration, des variable d'environnement et des flags.).

Pour l'unit systemd, il faudra mettre à jour avec ces valeurs :

[Service]
Restart=on-failure
RestartSec=20s
Edited by Alexandre Moevi

Merge request reports