我有一种情况,一旦从MQTT Broker收到消息,在处理数据的过程中,假设DB停机并且没有完成任务。在这种特定情况下,接收到的数据必须发送回代理,我的任务尚未完成,我指的是回滚。
如何实现这一点,以及如何告诉broker在处理数据的过程中出现了一些异常,您需要再次发送数据。
有人能帮上忙吗?
发布于 2020-08-11 15:18:24
可以做到这一点,但只能使用某些MQTT客户端库,这些库允许您完全控制QOS握手过程。
假设客户端已经在QOS1或QOS2订阅了一个主题,然后它可以选择将PUBACK或PUBREC数据包发送回代理。它可以推迟完成QOS握手,直到消息完全处理完毕。如果处理失败并且完全握手没有完成,那么代理将再次尝试将消息重新传递给客户端,因此客户端应该在失败的情况下离线,这样代理将对消息进行排队。
当后端(数据存储)恢复在线时,客户端可以重新连接到代理,排队的消息将被重新传递。
https://stackoverflow.com/questions/63359542
复制