Автоматическое повторное подключение с Stomp.js в узле.приложения на JS
Я работаю с приложением, которое написано в узле.js и Express, и я пытаюсь использовать топать.клиент на JS для подключения к серверу ActiveMQ.
Я могу получить приложение для подключения к ActiveMQ просто отлично, используя Stomp, но я не могу заставить систему автоматически подключиться при сбое соединения. Похоже, что функция сбоя вызывается только в том случае, если соединение изначально успешно, а затем разорвано, хотя если ActiveMQ уже когда приложение узла запускается, я вижу сообщение об ошибке, которое доказывает, что функция сбоя была вызвана.
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();
2 ответов
WebSocket, который удерживается Stomp.клиент можно открыть только один раз. Если произошел сбой сети, повторное подключение с тем же StompClient не будет работать, поскольку веб-сокет останется закрытым.
Это определенно может быть улучшено stomp.js но в то же время вы можете обойти это, воссоздавая Stomp.клиент при обнаружении сбоя. Что-то вроде:
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);
}
оригинальный sompjs больше не поддерживается. Пожалуйста, используйте https://github.com/stomp-js/stomp-websocket Эта версия имеет поддержку автоматического повторного подключения. При каждом успешном подключении вызывается обратный вызов connect, на который можно выполнить подписку.
Если вы используете Angular 2, 4 или 5. Вы должны посмотреть на https://github.com/stomp-js/ng2-stompjs этот пакет не только поддерживает автоматическое повторное подключение, но и подпишет все очереди и отправка ожидающих сообщений.