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
,因为我认为主要的变化(当前问题的一个示例)只能通过它来实现。
我该如何解决这样的问题,当我重新订阅该主题时,我想查看所有发布者遗漏的消息吗?
答案 0 :(得分:1)
您需要为邮件使用QOS(服务质量)值。默认情况下,QOS设置为0,这基本上是一劳永逸的,QOS 1是确保交付的(但可能意味着交付了多次)。确保QOS 2只交付一次。
需要指出的是,QOS在1个客户端和中间人之间,因此它可以在发布者和中间人之间,也可以在中间人和订户之间。 (例如,您可以在QOS 0上发布,然后在QOS 2上订阅该主题)。
对于脱机客户端的消息队列,客户端需要已在QOS 1或QOS 2上订阅,并且在重新连接时需要将其cleanSession标志设置为false
并使用相同的客户端ID。
MQTT代理不会为从未连接过的客户端排队消息。
使用mosquitto_sub和mosquitto_pub,可以使用-q
选项设置QOS级别,并可以使用-i
选项设置客户端ID。要将mosquitto_sub的清洁会话标志设置为false,应使用-c
选项