我正在EC2上的Ubuntu上运行mosquitto代理。我还在max_queued_messages 1000
max_inflight_messages 10
和/etc/mosquitto/mosquitto.conf
我正在使用 qos = 2 和保留已启用向该经纪人发布。对于发布我正在使用mosquitto_pub -t 1 -m "{c:{d:\"pN\",m:\"Pr1\"}}" -r -q 2
。而订阅方我正在使用org.eclipse.paho.android.service:1.0.2
库,qos = 2。
仅options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1)
为client.connect(options)
的参数提供单一选项。
如果连接到服务器的用户设备由于任何原因断开连接并再次重新连接,那么问题即将到来,然后只获得单个最后保留的消息,它缺少消息之间的所有消息。
如果还没有发布任何内容,仍然在重新连接之后获得用户设备在断开连接之前可能已经获得的最后一条保留消息。
我希望在重新连接用户之后,应该获得在断开连接期间发布的所有消息,如果已经获得,则不应再次显示。想知道如何以及在哪里做。
答案 0 :(得分:3)
发布的最后一条保留消息将始终在您订阅某个主题时发送,即使它已经在没有任何QOS级别之前已经发布。这是故意的,如果邮件发布为保留,则无法阻止它。 (为了清楚起见,发布带有保留标志的消息将替换最后保留的消息,并且不会排队所有保留的消息。)
至于没有在断开连接/重新连接之间发布消息,这意味着它传递了cleansession=true
连接选项的客户端。如果您希望传递错过的消息,则需要确保在连接时cleansession
标志设置为false
。如果使用保留标志发布消息,则完全独立。