java - QoS1 与 QoS2 消息 - 使用 Java 中的 Paho MQTT 客户端处理它的差异

标签 java mqtt paho

引用this article我想我知道 QoS1 和 QoS2 消息之间的区别,但我不知道将它们作为 Paho MQTT 客户端处理的区别。

假设我订阅了这样的主题:

MqttClient subscriber = new MqttClient(SERVER_URI, SUBSCRIBER_ID);
subscriber.subscribe(TOPIC);

然后我发布这样的消息:

publisher.publish(TOPIC, PAYLOAD, 1, false);

此时我正在使用 MqttCallback 接口(interface)来处理到达订阅者的消息。

有一个方法可以覆盖:

public void messageArrived(String topic, MqttMessage mqttMessage) {
    if(mqttMessage.isDuplicate()) {
        // is it really the duplicate message from my perspective?
    } else {...}
}

在 MqttMessage 中,我们可以找到 isDuplicate() 方法,但是我如何确定返回 true 的 mqttMessage 不是我的订阅者收到的第一条消息?

我对找到一个展示如何处理 QoS1 的解决方案非常感兴趣,但是每一个能够澄清这里任何内容的答案都将受到赞赏。

来自克拉科夫的最诚挚的问候!

最佳答案

仅仅依靠重复标志是不够的,因为您可能会错过第一条消息。如果 QoS 1 消息不是幂等的,这里有一些如何进行重复检测的建议:

  • 对有效负载 + 主题进行哈希处理,并提供一个包含最后 X 条消息及其哈希值的表,以便您可以检查是否已收到该消息
  • 负载中具有唯一的 ID,并具有包含最后 X 条消息及其可用 ID 的表格
  • 负载中包含时间戳,并有一个包含最后 X 条消息及其可用时间戳的表

如果您确实需要确保消息到达一次且仅一次,则可以使用 QoS 2。QoS 1 意味着您的客户端可以处理重复项(通过忽略重复消息或消息是幂等的)。

关于java - QoS1 与 QoS2 消息 - 使用 Java 中的 Paho MQTT 客户端处理它的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31425522/

相关文章:

c# - M2MQTT如何自动重连

python - 如何在 Django 中使用 paho mqtt 客户端?

python - 用于测试的 MQTT 代理

java - 解析日期 YYYY-MM-DD HH :mm:ss 的异常

java - For循环,切换 boolean 值

java - UserId 无法解析为类型错误 java

java - Java 中的双重泛型实例化

javascript - MQTT mosquitto - 使用 mqttws31.js 在 javascript 中实现 websocket

java - 在 Spring Boot 中添加具有不同客户端 ID 的 MQTT 连接

c - Eclipse Paho MQTT 客户端 : How to check for existing connection?