MQTT 客户端在重新启动时重复上一条消息
MQTT Client repeating last message, when restarted
每当我重新启动运行 MQTT 客户端的 WAR 项目时,我都会取回客户端收到的最后一条消息,因此会重复。是什么原因造成的?客户端代码?服务器配置?
客户端
OS:Debian GNU/Linux 8.2(杰西); Java: java version "1.7.0_91", OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-1~ deb8u1)、OpenJDK 64 位服务器 VM(构建 24.91-b01,混合模式)
阿帕奇 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>
使用这个存根接收消息,实现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 网站 here 上对保留消息有很好的描述,但基本上保留位告诉代理存储最后发布的带有给定主题标志的消息,并将其传递给任何客户在他们订阅主题时。这包括客户端重新连接的时间。用例是确保客户端始终拥有最新数据。
deliveryComplete
函数仅在消息发布时调用(这是客户端库根据 QOS 级别确认消息已离开其控制)
每当我重新启动运行 MQTT 客户端的 WAR 项目时,我都会取回客户端收到的最后一条消息,因此会重复。是什么原因造成的?客户端代码?服务器配置?
客户端
OS:Debian GNU/Linux 8.2(杰西); Java: java version "1.7.0_91", OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-1~ deb8u1)、OpenJDK 64 位服务器 VM(构建 24.91-b01,混合模式)
阿帕奇 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>
使用这个存根接收消息,实现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 网站 here 上对保留消息有很好的描述,但基本上保留位告诉代理存储最后发布的带有给定主题标志的消息,并将其传递给任何客户在他们订阅主题时。这包括客户端重新连接的时间。用例是确保客户端始终拥有最新数据。
deliveryComplete
函数仅在消息发布时调用(这是客户端库根据 QOS 级别确认消息已离开其控制)