stompjs +创建自动删除队列



我们使用RabbitMQ + StompJS (w/SockJS &Spring Websocket作为中间件(fww),以方便在Websocket上广播消息。一切都很好,除了不管我们尝试什么,StompJS都将队列创建为非自动删除,这意味着我们最终会有大量的队列。

我们现在正在使用一个策略来解决这个问题,该策略可以在几个小时后清除非活动队列,但我们宁愿在所有客户端断开连接后自动删除队列。

我们已经尝试设置标题auto_delete, auto-delete, autoDelete和我们可以找到的所有其他可能的咒语。

如果我们在传输帧之前停止并检查帧(在StompJS源代码深处的最低级别),我们可以看到这些报头存在。然而,它们似乎并没有进入RabbitMQ(或者它只是没有在"SUBSCRIPTION"命令中查看它们??),并将它们创建为非自动删除。

有趣的是,如果我们事先手动创建队列作为自动删除,则StompJS注册会调用error,因为所请求的SUBSCRIBE期望非自动删除。这表明是StompJS(或SockJS)明确声明了非自动删除,但我们已经仔细研究了源代码并排除了这种可能性。那么,百万美元的问题:我们如何能够自动删除队列与StompJS?请,非常感谢,并提前感谢:)

注册示例

function reg(dest, callback, headers){
    stomp.subscribe(dest, callback, headers);
}
function cb(payload){
    console.log(JSON.parse(payload.body));
}
reg('/queue/foobar', cb, {});
<<p> 设置细节/strong>RabbitMQ 3.5.2和StompJS 2.3.3

**注**如果我直接订阅交换(目的地为/exchange/foo或/topic/foo),交换将被定义为自动删除。

我在生产中使用StompJS/RabbitMQ,我没有看到这个问题。我不能确定你的问题是什么,但我可以详细说明我的设置,希望你能发现一些可能有所帮助的差异。

  • 我正在运行Rabbit MQ 3.0.1.
  • 我正在使用SockJS 0.3.4,我似乎记得使用GitHub最近发布的一些问题,但不幸的是我没有做笔记,所以我不确定问题是什么。
  • 我正在使用StompJS 2.3.4

由于某些原因我就不在这里赘述了——我禁用了WebSockets传输,将所有其他传输都列入白名单。

下面是一些简化的代码,展示了我是如何连接的:
var socket = new SockJS(config.stompUrl, null, { protocols_whitelist: ['xdr-streaming', 'xhr-streaming', 'iframe-eventsource', 'iframe-htmlfile', 'xdr-polling', 'xhr-polling', 'iframe-xhr-polling', 'jsonp-polling'] });
var client = Stomp.over(socket);
client.debug = function () { };
client.heartbeat.outgoing = 0;
client.heartbeat.incoming = 0;
client.connect(config.rabbitUsername, config.rabbitPassword, function () {
   onConnected();
}, function () {
   reconnect(d);
}, '/');

我是这样断开连接的:

// close the socket first, otherwise STOMP throws an error on disconnect
socket.close();
client.disconnect(function () {
   isConnected = false;
});

我是这样订阅的(这发生在我的onConnected函数中):

client.subscribe('/topic/{routing-key}', function (x) {
   var message = JSON.parse(x.body);
   // do stuff with message
});

我的第一个建议是尝试我列出的客户端库的特定版本。我有一些问题,让这些很好地发挥-这些版本为我工作。

在RabbitMQ 3.6.0+中可以将订阅头中的auto-delete设置为true。详情请参阅https://www.rabbitmq.com/stomp.html#queue-parameters

相关内容

  • 没有找到相关文章

最新更新