我正在使用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); }