javascript - 在 Node.js 应用程序中使用 Stomp.js 自动重新连接

标签 javascript node.js express stomp

我正在使用一个用 Node.js 和 Express 编写的应用程序,我正在尝试使用 Stomp.js client连接到 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);
}

关于javascript - 在 Node.js 应用程序中使用 Stomp.js 自动重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22361917/

相关文章:

javascript - 在特定日期输入中隐藏 JQuery 日期选择器中的日期

java - 如何计算与 Web 应用程序代码相关的 selenium 测试的代码覆盖率

javascript - 如何验证 API 调用中参数的存在

javascript - 表单提交 404 未找到错误

javascript - node/express - 缺少 ) 在参数列表之后

html - 使用ejs和node创建动态html

javascript - applet 上的 div 标签

javascript - 根据表单中选择的选项显示或隐藏不同的 div

node.js - 在 Node.js 中获取 URL 时出现 ECONNRESET 错误

node.js - Angular 4 + Material - 意外指令“MdHorizo​​ntalStepper”