1

我正在努力HiveMQ Websocket Client,我正面临着message delivery. 所以,我遇到了这个词PUBACK

让我解释一下我的理解,然后我会问我的问题。

每当我们使用 发送消息时,hivemq 服务器都会通过回调QOS1确认发送者。PUBACK

现在,我打算在我的 websockets 中订阅 onPubackReceived 事件,但是在发送消息后该事件没有触发。

我的代码:

var clientId = ClientIdentifier;


    mqtt = new Messaging.Client(
                    host,
                    port,
                    clientId);
    var options = {
        timeout: 3,
        keepAliveInterval: 60,
        useSSL: useTLS,
        cleanSession: cleansession,
        onSuccess: onConnect,
        onFailure: function (message) {
            connected = false;            
            setTimeout(MQTTconnect, reconnectTimeout);
        }
    };

    mqtt.onConnectionLost = onConnectionLost;
    mqtt.onMessageArrived = onMessageArrived;
    mqtt.onPubackReceived = OnPubackReceived;

当连接丢失并且消息到达时,onConnectionLost和都正确触发,但没有触发。onMessageArrivedonPubackReceived

如果我理解正确或者我做错了什么,请告诉我?

4

1 回答 1

4

这不是 HiveMQ 问题。

我的假设是,您使用HiveMQ Websocket Client作为实施的起点。

在任何情况下,Paho MQTT 客户端都没有onPubackReceived字段。如果您提供有关您的用例的更多详细信息或消息传递的问题,我可能会为您指明正确的方向。

编辑:您所描述的内容Quality of Service 1在 MQTT 中被调用。这是一个保证,一条消息至少被接收一次。保持此保证并因此重新发送消息是客户端实现的工作,如果PUBACK没有收到。在您的应用程序中手动干预此行为会导致客户端持久性不一致。澄清一下:简单duplicate=true的设置不会导致消息被识别为重复。它也必须与messageID原件相同。我实际上找不到任何有关paho.js保持服务质量 = 1 的文档。但是,MQTT.js可以。

QoS 1 : received at least once : 只要客户端没有收到来自服务器的确认,就发送并存储数据包。MQTT 确保它会被接收,但可能有重复。

总结一下:

  • 重新发送消息,没有收到 PUBACK,是客户端对象的工作。这是MQTT 规范的一部分。
  • 使用MQTT.jsWebsockets 上的作品并确保保持QoS levels

希望这可以帮助。

于 2017-03-22T14:42:05.433 回答