MQTT交付令牌和超时

时间:2015-08-25 11:55:01

标签: android eclipse mqtt paho

我正在开发一个数据关键的移动应用程序来向服务器发送消息。 为了利用MQTT的轻量级特性,KEEP_ALIVE_INTERVAL保持最大值> 60秒但我想确保无论如何都能传送数据包。目前我使用的是Eclipse PAHO java库。

究竟paho如何处理在QoS1 / 2令牌中发布的内容?超时是否可配置以及重试策略是什么?

我已经尝试过直接的方式但是由于我的数据生成器每秒产生1条消息,如果待处理的令牌开始堆叠,MQTT客户端会耗尽,我将更快地检测到任何滞后和连接损失,直到正在传送的数据包保持新生成的数据处于静止状态。 任何帮助将不胜感激!

谢谢。

1 个答案:

答案 0 :(得分:2)

PAHO处理在QoS1 / 2中发布的内容:

QOS 1 - 一次或多次交付

正常流量

  • 客户端发送QoS 1消息(PUBLISH,SUBSCRIBE,UNSUBSCRIBE)并存储在Persistent Outbox中
  • 客户端收到{PUB,SUB,UNSUB} ACK并从发件箱中删除消息

致谢前的死亡

  • 客户端发送QoS 1消息(PUBLISH,SUBSCRIBE,UNSUBSCRIBE)并存储在Persistent Outbox中
  • 客户端在收到{PUB,SUB,UNSUB} ACK之前死亡
  • 客户端使用相同的客户端ID重新启动并恢复持久性发件箱
  • 客户端重新发送“发件箱”中的邮件
  • 客户端收到{PUB,SUB,UNSUB} ACK并从发件箱中删除消息

传输中断

  • 客户端发送QoS 1消息(PUBLISH,SUBSCRIBE,UNSUBSCRIBE)并存储在Persistent Outbox中
  • 经纪人在转移消息之前死亡
  • 客户端重新连接相同的客户端ID
  • 客户端重新发送“发件箱”中的邮件
  • 客户端收到{PUB,SUB,UNSUB} ACK并从发件箱中删除消息

QOS 2 - 正好一次交付

正常流量

  • 客户端发送QoS 2 PUBLISH消息并存储在Persistent Outbox中 经纪人回复PUBREC
  • 客户端发送PUBREL
  • 经纪人回应PUBCOMP
  • 客户端收到PUBCOMP并从Persistent Outbox中删除消息

https://code.google.com/p/mqtt4erl/wiki/QualityOfServiceUseCases

我认为您只需要QoS1来节省带宽并使其交付更快