【问题标题】:MQTT Client repeating last message, when restartedMQTT 客户端在重新启动时重复最后一条消息
【发布时间】:2016-11-11 21:48:30
【问题描述】:

每当我重新启动运行 MQTT 客户端的 WAR 项目时,我都会返回客户端收到的最后一条消息,因此会出现重复消息。这可能是什么原因造成的?客户代码?服务器配置?

客户端

操作系统:Debian GNU/Linux 8.2 (jessie); Java:java 版本“1.7.0_91”,OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-1~deb8u1),OpenJDK 64-Bit Server VM (build 24.91-b01,混合模式)

Apache Tomcat/8.0.14 (Debian)

来自 https://repo.eclipse.org/content/repositories/paho-releases/ Maven 存储库的 MQTT 库,使用以下依赖项:

    <dependency>
        <groupId>org.eclipse.paho</groupId>
        <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
        <version>1.0.1</version>
    </dependency>

使用这个stub接收消息,实现org.eclipse.paho.client.mqttv3.MqttCallback:

@Override
public void messageArrived(String topic, MqttMessage msg) throws Exception {}

我看到还有另一种方法可以被覆盖,但我没有考虑:

@Override
public void deliveryComplete(IMqttDeliveryToken token) {
    // TODO Auto-generated method stub

}

我还应该提供什么?

【问题讨论】:

    标签: java tomcat client message-queue mqtt


    【解决方案1】:

    这是按设计工作的。

    不是订阅端的问题,是发布者造成的。

    消息发布时将保留位设置为 true。

    在 hivemq 网站here 上对保留消息有很好的描述,但基本上保留位告诉代理存储最后发布的带有给定主题标志的消息,并将其传递给此时的任何客户端他们订阅该主题。这包括客户端重新连接的时间。用例是确保客户端始终拥有最新数据。

    deliveryComplete 函数仅在消息发布时调用(它是客户端库根据 QOS 级别确认消息已离开它的控制)

    【讨论】:

    • 听起来不错,那我得去看看出版商那边。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 2021-11-12
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2017-12-26
    相关资源
    最近更新 更多