0

从 MQTT Broker 收到消息后,我有一个情况,在处理数据期间,假设 DB 已关闭且未完成任务。在那种特殊情况下,收到的数据必须发送回经纪人,我的任务没有完成,我的意思是回滚。

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

有人可以解决这个问题吗?

4

1 回答 1

0

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

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

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

于 2020-08-11T15:18:24.073 回答