【问题标题】:MQTT delivery tokens and time outMQTT 传递令牌和超时
【发布时间】:2015-08-25 11:55:01
【问题描述】:

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

paho 究竟如何根据令牌处理 QoS1/2 中的发布?超时是否可配置,重试策略是什么?

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

谢谢。

【问题讨论】:

  • 你能找到答案吗?我正在开发一个非常相似的 Android/Mqtt 消息传递项目。您有兴趣合作吗?
  • @BaradiBaradari 不,我找不到合理的答案。是的,我想进一步讨论这个问题..
  • 给我发一封电子邮件(在我的个人资料上)让我们讨论一下
  • 如果可能的话,也抄送我
  • @david 到目前为止我所知道的是 paho java / android 客户端不允许离线消息发布,即即使客户端未连接到服务器也发布消息。但是对于 QOS>0 有一种称为飞行中消息的东西,当您尝试将消息发布到断开连接的服务器时会发生这种情况,但客户端尚未注册断开连接,因此理想情况下消息会丢失,在此飞行限制之后超出将引发异常,并且在传递中的消息或失败之前,您无法进一步发布。

标签: android eclipse mqtt paho


【解决方案1】:

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 即可节省带宽并使其交付更快

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 2017-10-03
    • 2016-05-06
    • 1970-01-01
    • 2022-08-24
    • 2019-06-01
    • 1970-01-01
    相关资源
    最近更新 更多