当前位置: 首页 > 面试题库 >

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

幸阳波
2023-03-14
问题内容

我正在使用用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只能打开一次。如果出现网络故障,则由于Web套接字将保持关闭状态,因此无法使用相同的StompClient重新连接。

绝对可以通过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);
}


 类似资料:
  • 下面是我到目前为止的代码: 有人能解释一下在和情况下我该做什么吗?以及如何知道网络已断开并重新连接?

  • 问题内容: 如何创建可以重新启动的应用程序?我想创建一个设置可自行重启的网络管理员的应用。这可能吗?如果是这样,怎么办?我以为内置于节点中的全局变量可能会实现这一点。 问题答案: 我已经跑了好几次了,很容易上手。在以下位置查看:https://github.com/nodejitsu/forever

  • 问题内容: 我愿意在应用程序中添加一个按钮,单击该按钮将重新启动该应用程序。我搜索谷歌,但没有发现任何有用的,除了这一个。但是,此处遵循的过程违反了Java的WORA概念。 是否有其他以Java为中心的方法来实现此功能?是否可以只派生另一个副本然后退出? 提前致谢。我感谢您的帮助。 @deporter我已经尝试过您的解决方案,但是它不起作用:( @mKorbel我写的,采取的概念下面的代码,你曾在

  • 我正在使用IntelliJ IDEA15和tomcat开发一个AngularJS和Spring Boot应用程序,每当我对静态内容进行更改时,我总是要重新启动应用程序才能看到这些更改。 我找了一个类似的问题,我发现了这个: 启用html和javascript文件的IntelliJ热交换

  • 我正在用spring Boot2开发一个应用程序。我在docker中部署了应用程序,并激活了“使用spring DevTools在docker中自动重新加载”,但在添加spring-security后,自动重新加载不再起作用。触发自动重新启动时出现错误: