gpt4 book ai didi

java - MQTT 客户端在重新启动时重复上一条消息

转载 作者:行者123 更新时间:2023-11-28 22:07:38 24 4
gpt4 key购买 nike

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

客户端

操作系统:Debian GNU/Linux 8.2 (jessie); Java:java 版本“1.7.0_91”,OpenJDK 运行时环境 (IcedTea 2.6.3) (7u91-2.6.3-1~deb8u1),OpenJDK 64 位服务器 VM(build 24.91-b01,混合模式)

Apache Tomcat/8.0.14 (Debian)

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

    <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

}

我还应该提供什么?

最佳答案

这是按设计工作的。

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

正在发布消息,保留位设置为 true。

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

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

关于java - MQTT 客户端在重新启动时重复上一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38281667/

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