【问题标题】:Rollback Feature in MQTT Broker after message received from Broker从 Broker 收到消息后 MQTT Broker 中的回滚功能
【发布时间】:2020-08-11 13:46:25
【问题描述】:

一旦收到来自 MQTT Broker 的消息,我有一个情况,在处理数据期间,假设 DB 已关闭且未完成任务。在那种特殊情况下,收到的数据必须发回给我的任务未完成的代理,我的意思是回滚。

如何实现这一点以及如何告诉代理在处理数据过程中出现了一些异常,您需要再次发送数据。

有人能解决这个问题吗?

【问题讨论】:

  • 所以您的订阅者节点正在处理对数据库的写入?如果是这样,为什么它不只保留数据本身并等待数据库恢复? MQTT 协议中没有“回滚”或“召回”功能。

标签: mqtt emq


【解决方案1】:

可以做到这一点,但只能使用允许您完全控制 QOS 握手过程的某些 MQTT 客户端库。

假设客户端在 QOS 1 或 2 上订阅了一个主题,它可以选择保留将 PUBACK 或 PUBREC 数据包发送回代理。它可以推迟完成 QOS 握手,直到消息被完全处理。如果处理失败并且未完成完整的握手,则代理将尝试再次将消息重新传递给客户端,因此客户端应在失败的情况下下线,以便损坏的消息将消息排队。

当后端(数据存储)重新上线时,客户端可以重新连接到代理,排队的消息将被重新传递。

【讨论】:

  • 感谢 hardillb 的回复。某些 MQTT 客户端库是什么意思。我们是否需要迁移到 Broker 的企业版。目前我们正在使用 Erlang EMQ 代理。
  • 不,这与经纪人无关。我的意思是,在众多不同的客户端库实现中,只有少数几个实际上可以让您控制它们如何响应 QOS 握手,您将不得不进行调查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2015-01-10
  • 2020-04-06
  • 2017-01-20
相关资源
最近更新 更多