Reconnaissance automatique avec Stomp.js dans l'application Node.js

Je travaille avec une application écrite dans Node.js et Express, et j'essaie d'utiliser le client Stomp.js pour me connecter à un serveur ActiveMQ.

Je peux demander à l'application de se connecter à ActiveMQ juste à l'aide de Stomp, mais je ne parviens pas à ce que le système se reconnecte automatiquement lors d'une panne de connexion. Il semble que la fonction d'échec ne soit appelée que si la connexion est initialement réussie puis découpée plus tard, si ActiveMQ est déjà désactivé lorsque l'application Node démarre, je vois le message d'erreur qui prouve la fonction d'échec appelée.

var Stomp = require('stompjs'); var stompClient = Stomp.overTCP('localhost', 61612); var stompStatus = false; var stompSuccessCallback = function (frame) { stompStatus = true; console.log('STOMP: Connection successful'); }; var stompFailureCallback = function (error) { stompStatus = false; console.log('STOMP: ' + error); setTimeout(stompConnect, 10000); console.log('STOMP: Reconecting in 10 seconds'); }; function stompConnect() { console.log('STOMP: Attempting connection'); stompClient.connect('login', 'password', stompSuccessCallback, stompFailureCallback); } stompConnect(); 

Est-ce que quelqu'un a une idée de ce qui se passe ici?

Le WebSocket détenu par Stomp.client ne peut être ouvert qu'une seule fois. S'il y a une défaillance du réseau, la reconnexion avec le même StompClient ne fonctionnera pas car la socket Web reste fermée.

Cela peut certainement être amélioré par stomp.js mais, dans le même temps, vous pouvez contourner cela en recréant Stomp.client lorsqu'une défaillance est détectée. Quelque chose comme:

 var stompClient; var stompFailureCallback = function (error) { console.log('STOMP: ' + error); setTimeout(stompConnect, 10000); console.log('STOMP: Reconecting in 10 seconds'); }; function stompConnect() { console.log('STOMP: Attempting connection'); // recreate the stompClient to use a new WebSocket stompClient = Stomp.overTCP('localhost', 61612); stompClient.connect('login', 'password', stompSuccessCallback, stompFailureCallback); }