我们正在使用RabbitMQ + StompJS(带有SockJS和Spring Websocket作为中间件)来促进通过websockets广播消息。一切正常,除了无论我们尝试什么,StompJS都会创建非自动删除的队列,这意味着我们最终会拥有大量队列。
我们现在正在处理一个策略,清除几个小时后不活动的队列,但是我们宁愿只有在所有客户端断开连接后才终止的自动删除队列。
我们已经尝试设置标题
如果我们停止并检查在发送之前的帧(在StompJS源代码深处的最低层),我们可以看到这些标头存在。但是,它们似乎没有传递到RabbitMQ(或者它只是不在“SUBSCRIPTION”命令上查看它们??),并将它们创建为非自动删除。
有趣的是,如果我们预先手动创建自动删除的队列,则StompJS注册调用会出错,因为请求的SUBSCRIBE需要非自动删除。这表明是StompJS(或SockJS)明确指定为非自动删除,但我们检查过源代码,排除了这种可能性。
那么,百万美元的问题是:我们如何使用StompJS实现自动删除队列?拜托了,请提供帮助并感谢您的支持 :) 示例注册
我们现在正在处理一个策略,清除几个小时后不活动的队列,但是我们宁愿只有在所有客户端断开连接后才终止的自动删除队列。
我们已经尝试设置标题
auto_delete
,auto-delete
,autoDelete
和我们可以找到的每个其他可能的咒语。如果我们停止并检查在发送之前的帧(在StompJS源代码深处的最低层),我们可以看到这些标头存在。但是,它们似乎没有传递到RabbitMQ(或者它只是不在“SUBSCRIPTION”命令上查看它们??),并将它们创建为非自动删除。
有趣的是,如果我们预先手动创建自动删除的队列,则StompJS注册调用会出错,因为请求的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, {});
设置细节 RabbitMQ 3.5.2和StompJS 2.3.3
** 注意 ** 如果我直接订阅交换机 (例如 /exchange/foo 或 /topic/foo),交换机将被定义为自动删除。只有队列不是自动删除。