我正在开发一个数据关键型移动应用程序,以将消息发送到服务器。
为了利用MQTT的轻量级特性,KEEP_ALIVE_INTERVAL保持最大> 60秒。但是我想确保无论如何都可以发送数据包。目前,我使用Eclipse PAHO Java库。
Paho如何精确地处理QoS1 / 2令牌中的发布?超时是可配置的,重试策略是什么?
我已经尝试了简单的方法,但是鉴于我的数据生产者每秒产生1条消息,如果挂起的令牌开始堆积,MQTT客户端就会精疲力尽,我必须更快地检测到任何滞后和连接丢失,直到出现数据包上的数据包为止。交付果蝇时,请保持新生成的数据静止。
任何帮助将不胜感激!
谢谢。
最佳答案
PAHO处理QoS1 / 2中的发布:
QOS 1-一个或多个交付
正常流量
客户端发送QoS 1消息(发布,订阅,取消订阅)并存储在持久发件箱中
客户端收到{PUB,SUB,UNSUB} ACK并从发件箱中删除邮件
确认前死亡
客户端发送QoS 1消息(发布,订阅,取消订阅)并存储在持久发件箱中
客户在收到{PUB,SUB,UNSUB} ACK之前死亡
客户端使用相同的客户端ID重新启动并恢复持久发件箱
客户端在发件箱中重新发送邮件
客户端收到{PUB,SUB,UNSUB} ACK并从发件箱中删除邮件
传输中断
客户端发送QoS 1消息(发布,订阅,取消订阅)并存储在持久发件箱中
代理在消息传输之前死亡
客户端使用相同的客户端ID重新连接
客户端在发件箱中重新发送邮件
客户端收到{PUB,SUB,UNSUB} ACK并从发件箱中删除邮件
QOS 2-只需一次交付
正常流量
客户端发送QoS 2 PUBLISH消息并存储在持久发件箱中
经纪人回复PUBREC
客户端发送PUBREL
经纪人回应PUBCOMP
客户端收到PUBCOMP并从持久发件箱中删除消息
https://code.google.com/p/mqtt4erl/wiki/QualityOfServiceUseCases
我认为您只需要QoS1即可节省带宽并加快交付速度