发布消息后,如果我用新设备订阅,它不会立即收到消息,而是必须再次发布消息才能收到。为什么会发生这种情况以及如何解决它?
对于订阅电脑,我输入了命令
mosquitto_sub -h publisher_ip -t topic_name
对于发布者电脑
mosquitto_pub -h publisher_ip -t topic_name -m message
因为 Pub/Sub 消息传递无法以这种方式工作。
在正常情况下,消息仅传递给在线且具有与发布消息的主题匹配的有效订阅的客户端。
发布/订阅消息传递不是消息队列。
现在,此规则有 2 个例外。
如果消息是使用保留位集发布的,则每个主题上发布的最后一条消息(带有位集)将保存在代理中,并传递到随后在订阅点订阅匹配主题的任何客户端。他们还将收到任何新消息。您可以在此处
阅读有关保留消息的更多信息通过将
-r
添加到 mosquitto_pub
命令,可以使用保留位发布消息
如果具有固定客户端 ID 的客户端连接并订阅了一堆 QOS 大于
0
的主题,则断开连接。如果当他们重新连接时,他们使用相同的客户端 ID 并确保连接时将 Clean Session 标志设置为 false
,则所有旧的订阅将从上一个会话继续,并且代理将对所有丢失的消息进行排队。这称为持久订阅,您可以在此处阅读更多内容
mosquitto_sub -i some_client_id -q 1 -c -t topic_name
-c
将清理会话设置为 false
-i some_client_id
设置客户端id-q 1
将订阅 QOS 设置为 1