mqtt - mqtt 接收器未获取数据
问题描述
我是初学者MQTT
,我想我误解了这个概念。我已经使用带有 QOS 1 和 2 的红色节点发布了一条消息(例如:m1001),代理收到了该消息。那时,订阅者或接收者由于电源或互联网故障而断开连接。
当我现在重新连接到代理时,我没有在订阅者中收到消息(例如:m1001),如果我设置retain=true
,消息将存储在代理中并重复执行消息,直到我手动清除它。
我要求每条消息都从 pub 传递到 sub 而不会失败。我怎样才能做到这一点?
解决方案
QOS 适用于订阅者和发布者,并且仅在一个客户端和代理之间。这意味着如果客户端以 QOS 1/2 发布消息,则 QOS 握手仅在发布者和代理之间进行。订阅客户端还需要请求 QOS 1/2 才能确保交付
要在订阅者重新连接时将消息传递给订阅者,他们需要以 QOS 1/2 订阅主题,并确保在重新连接时将 cleanSession 标志设置为 false。
保留的消息是不同的,当客户端订阅匹配的主题时,最后保留的消息将始终传递给客户端,直到保留的消息被清除(通过发布设置了保留位的空有效负载)。