WIP:Connexion perdue à RabbitMQ
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