首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stompjs + rabbitmq -创建自动删除队列

stompjs + rabbitmq -创建自动删除队列
EN

Stack Overflow用户
提问于 2015-07-31 20:53:50
回答 2查看 2.5K关注 0票数 4

我们使用RabbitMQ + StompJS (w/ SockJS和Spring作为中间件,FWIW)来方便通过Websocket广播消息。一切都很好,但不管我们怎么尝试,StompJS都会以非自动删除的方式创建队列,这意味着我们最终会有大量的队列。

我们现在使用的策略是在几个小时后清除不活动的队列,但我们更希望在所有客户端断开连接后终止自动删除队列。

我们尝试设置标题auto_deleteauto-deleteautoDelete和所有其他我们可以找到的咒语。

如果我们在帧被传输之前停止检查它们(在StompJS源的深度中尽可能低的级别),我们可以看到这些标头的存在。但是,他们似乎没有把它转到RabbitMQ (或者它只是不使用“订阅”命令?)并将其创建为非自动删除。

有趣的是,如果我们预先以自动删除的方式手动创建队列,StompJS注册将导致错误退出,因为请求的订阅预期不会自动删除。这表明是StompJS (或SockJS)显式地声明了非自动删除,但我们已经对源代码进行了说明,并排除了这一点。

那么,百万美元的问题是:我们如何使用自动删除队列()和StompJS?求你了,谢谢你,谢谢:)

示例注册

代码语言:javascript
复制
function reg(dest, callback, headers){
    stomp.subscribe(dest, callback, headers);
}

function cb(payload){
    console.log(JSON.parse(payload.body));
}

reg('/queue/foobar', cb, {});

安装详细信息 RabbitMQ 3.5.2和StompJS 2.3.3

**注**如果我直接订阅该交易所(其目的地为/ exchange /foo或/topic/foo),则该交易所将被定义为自动删除。只有队列才不是自动删除。

EN

回答 2

Stack Overflow用户

发布于 2015-08-03 08:08:55

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

  • 我正在与兔子MQ 3.0.1竞争。
  • 我正在使用SockJS 0.3.4,我似乎还记得在使用GitHub最新版本时遇到了一些问题,但不幸的是,我没有做笔记,所以我不知道问题是什么。
  • 我用的是StompJS 2.3.4

由于我不想进入这里的原因-我已经禁用了WebSockets传输,通过白名单所有其他传输。

下面是一些简单的代码,展示了我如何连接:

代码语言:javascript
复制
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);
}, '/');

我就是这样断开联系的:

代码语言:javascript
复制
// close the socket first, otherwise STOMP throws an error on disconnect
socket.close();

client.disconnect(function () {
   isConnected = false;
});

下面是我订阅的方式(这发生在我的onConnected函数中):

代码语言:javascript
复制
client.subscribe('/topic/{routing-key}', function (x) {
   var message = JSON.parse(x.body);

   // do stuff with message
});

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

票数 0
EN

Stack Overflow用户

发布于 2018-11-25 14:41:45

使用RabbitMQ 3.6.0+可以通过在订阅标头中设置auto-deletetrue。详情请见https://www.rabbitmq.com/stomp.html#queue-parameters

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31755009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档