我正在使用RabbitMQ-web-stomp插件将JS客户端连接到RabbitMQ。作为客户,我正在使用SockJS。我可以成功建立连接并订阅交换。订阅成功后,将按预期收到消息。
但是,正如我所观察到的,连接经常丢失并且它将停止接收更多消息。为了解决这个问题,我试图编写一些重新连接逻辑,它将使用渐进式延迟重试on_error
回调中的连接。在这样做时,我似乎永远无法恢复与同一connection
对象的连接。我需要使用:
connection
对象订阅
var ws = new SockJS(configurations.webSocket);
var client = Stomp.over(ws);
client.heartbeat.incoming = 0;
client.heartbeat.outgoing = 0;
client.connect('Username', 'Password', function () {
client.subscribe('/exchange/exchangename/topicname', function (e) {
//subscription callback
});
}, function (err) {
console.log('Error in RabbitMQ connection: ', err);
}, '/');
但在执行此操作时,它将创建一个新队列,并且在连接中断时发布的所有消息都不会传递给此客户端。
我该如何解决这个问题?有没有办法在订阅时指定队列名称?如果是这样,我可以指定旧队列名称,它可能绑定到现有队列。
我是RabbitMQ的新手。所以,请建议是否有更好的方法来做我想要实现的目标。
PS:我正在使用主题交换。