蚊子经纪人保留多条消息

mosquitto broker retain multiple messages

我在 EC2 的 Ubuntu 上安装了 mosquitto 代理 运行。我还对 /etc/mosquitto/mosquitto.conf

进行了更改 max_queued_messages 1000max_inflight_messages 10

我正在使用 qos=2保留启用 发布到此代理。对于发布,我使用 mosquitto_pub -t 1 -m "{c:{d:\"pN\",m:\"Pr1\"}}" -r -q 2。订户端我正在使用具有相同 qos=2 的 org.eclipse.paho.android.service:1.0.2 库。
并且仅通过 options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1)client.connect(options) 的参数提供单一选项。

如果连接到服务器的订阅者设备由于任何原因断开连接并再次重新连接,那么问题就来了,然后只得到最后一条保留的消息,它丢失了消息之间的所有消息。
而且,即使还没有发布任何内容,重新连接后仍会获取订阅者设备在断开连接之前可能已经获取的最后保留消息。

我希望在重新连接后,订阅者应该获得在断开连接期间发布的所有消息,如果已经获得则不应再次显示。想知道如何以及在哪里做。

当您订阅主题时,无论 QOS 级别如何,最后发布的保留消息将始终被传递,即使它已经被传递。这是有意的,如果消息作为保留发布,则无法阻止它。 (明确一点,发布带有保留标志的消息将替换最后一条保留消息,并且不会将所有保留消息排队。)

至于没有在 disconnect/reconnect 之间发布消息,这意味着客户端传递了 cleansession=true 连接选项。如果您希望传递错过的消息,则需要确保 cleansession 标志在连接时设置为 false。这完全独立于是否使用保留标志发布消息。