我无法在 RabbitMQ 管理门户上使用 MQTT over WebSocket 在队列上看到消息,并且它们未存储在队列中

I'm not able to see messages on queue on RabbitMQ managment portal with MQTT over WebSocket and they are not stored in a queue

提问人:Eridano 提问时间:7/21/2023 最后编辑:BritsEridano 更新时间:7/21/2023 访问量:36

问:

按照 RabbitMQ 文档,我正在尝试在浏览器中订阅和接收来自该主题的消息。同时,为了将它们发送到 RabbitMQ,我使用了一个名为 mqtt-explorer 的程序。
在浏览器的控制台中,我能够看到我发送的消息实际上已经到达,即使当我尝试打开 RabbitMQ 的管理门户时,我只看到一些自动生成的队列,这些队列总是说我的队列上有 0 条消息。
/topic/test

这是我用mqtt-explorer发送的内容: 这是我与mqtt-explorer发送的同时连接的浏览器: mqtt-explorer screenshotbrowser screenshot

如果此时浏览器未连接,则消息不会出现在 RabbitMQ 上的队列中。
这是我在仅连接 mqtt-explorer 并发送消息时能够看到的。
RqbbitMQ Queues screenshot

在浏览器的代码下方:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello MQTT</title>
</head>
<body>
    <h1>Hello MQTT</h1>
    <p>This is a basic HTML page with the title</p>

    <!-- Source library -->
    <script src="mqttws31.js" type="text/javascript"></script>

    <script>

        var wsbroker = "localhost"
        var wsport = 15675; // port for above
        var client = new Paho.MQTT.Client(wsbroker, wsport, "/ws",
            "myclientid_" + parseInt(Math.random() * 100, 10));

        client.onConnectionLost = function (responseObject) {
            console.log("CONNECTION LOST - " + responseObject.errorMessage);
        };

        client.onMessageArrived = function (message) {
            console.log("RECEIVE ON " + message.destinationName + " PAYLOAD " + message.payloadString);
        };

        var options = {
            timeout: 3,
            keepAliveInterval: 30,

            onSuccess: function () {
                console.log("CONNECTION SUCCESS");
                client.subscribe('/topic/test', {qos: 1});
            },

            onFailure: function (message) {
                console.log("CONNECTION FAILURE - " + message.errorMessage);
            }
        };
        
        console.log("CONNECT TO " + wsbroker + ":" + wsport);
        client.connect(options);

    </script>
</body>
</html>
websocket rabbitmq mqtt 消息代理 rabbitmq-exchange

评论

0赞 Brits 7/21/2023
如果我理解正确,您的问题是当 javascript 连接时,它在断开连接时没有接收发送的消息?如果是这种情况,那么缺少 in 可能是问题所在(MQTT 订阅在断开连接时被清除,默认设置)。有关详细信息,请参阅此答案,并在文档中查看此答案cleanSession: falseoptions
1赞 Eridano 7/21/2023
@Brits非常感谢,这对我帮助很大。我无法看到队列中的消息,因为 js 消耗它们的速度太快了,我也看不到。有了这个,我就可以停止js并看到消息随心所欲地在队列中累积。

答: 暂无答案