繁体   English   中英

自动重新连接Node.js应用程序中的Stomp.js

[英]Automatic reconnect with Stomp.js in Node.js application

我正在使用Node.js和Express编写的应用程序,我正在尝试使用Stomp.js客户端连接到ActiveMQ服务器。

我可以使用Stomp将应用程序连接到ActiveMQ,但我无法让系统在连接失败时自动重新连接。 似乎只有在连接最初成功然后被切断时才调用失败函数,但是如果在Node应用程序启动时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();

有没有人知道这里发生了什么?

Stomp.client持有的WebSocket只能打开一次。 如果网络出现故障,则重新连接相同的StompClient将无法正常工作,因为Web套接字将保持关闭状态。

这肯定可以通过stomp.js来改进,但同时,您可以通过在检测到故障时重新创建Stomp.client来解决此问题。 就像是:

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此软件包不仅支持自动重新连接,还会重新订阅所有队列并发送任何待处理的消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM