通过新的订户连接(MQTT / Mosquitto)显示发布者错过的消息

时间:2019-02-09 19:32:15

标签: mqtt iot mosquitto

Publusher使用命令-m "hello"将消息-t hello发送到主题mosquitto_pub -h 172.17.*.* -t hello -m "hello" -d。仅当与主题-m "hello"的连接处于活动状态时,订户才能看到消息-t hello。但是,如果订阅者未订阅-t hello主题,而发布者仍在发送关于-t hello主题的消息,那么当您尝试订阅该主题时,mosquitto_sub -h 172.17. *. * -t hello订阅者不会收到发送的消息来自发布者的消息。

在阅读文档之后,打破了几个经纪人,我才意识到,如果您像这样将标记放在发布者-r--mosquitto_pub -h 172.17. *. * -r -t hello -m "hello"上,您就可以看到最后一条消息。我配置了mosquitto.conf,因为我认为主要的变化(当前问题的一个示例)只能通过它来实现。

我该如何解决这样的问题,当我重新订阅该主题时,我想查看所有发布者遗漏的消息吗?

1 个答案:

答案 0 :(得分:1)

您需要为邮件使用QOS(服务质量)值。默认情况下,QOS设置为0,这基本上是一劳永逸的,QOS 1是确保交付的(但可能意味着交付了多次)。确保QOS 2只交付一次。

需要指出的是,QOS在1个客户端和中间人之间,因此它可以在发布者和中间人之间,也可以在中间人和订户之间。 (例如,您可以在QOS 0上发布,然后在QOS 2上订阅该主题)。

对于脱机客户端的消息队列,客户端需要已在QOS 1或QOS 2上订阅,并且在重新连接时需要将其cleanSession标志设置为false并使用相同的客户端ID。

MQTT代理不会为从未连接过的客户端排队消息。

使用mosquitto_submosquitto_pub,可以使用-q选项设置QOS级别,并可以使用-i选项设置客户端ID。要将mosquitto_sub的清洁会话标志设置为false,应使用-c选项