gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:12:56 25 4
gpt4 key购买 nike

我们使用 RabbitMQ + StompJS(使用 SockJS 和 Spring Websocket 作为中间件,FWIW)来促进通过 websocket 广播消息。一切都很好,除了无论我们尝试什么,StompJS 都会将队列创建为非自动删除,这意味着我们最终会得到大量的队列。

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

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

如果我们在传输帧之前停止检查帧(在 StompJS 源代码的最低级别),我们可以看到这些 header 存在。但是,它们似乎并没有进入 RabbitMQ(或者它只是没有在“订阅”命令上查看它们??)并将它们创建为非自动删除。

有趣的是,如果我们事先手动创建队列作为自动删除,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 等目的地),交换将被定义为自动删除。只有队列不会自动删除。

最佳答案

我在生产中使用 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
    });

    我的第一个建议是尝试我列出的特定版本的客户端库。我有一些问题让这些播放得很好 - 这些版本对我有用。

    关于websocket - stompjs + rabbitmq - 创建自动删除队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755009/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com