显示来自具有新订户连接(MQTT/MOSQUITO)的发布服务器的丢失消息

显示来自具有新订户连接(MQTT/MOSQUITO)的发布服务器的丢失消息,mqtt,iot,mosquitto,Mqtt,Iot,Mosquitto,Publusher使用命令mosquitto_pub-h 172.17.*.*-t hello-m“hello”向主题-t hello发送消息。只有当与主题-t hello的连接处于活动状态时,订阅者才会看到消息-m“hello”。但是,如果订阅者未订阅-t hello主题,而发布者仍在-t hello主题上发送消息,则当您尝试订阅此主题时mosquitto_sub-h 172.17.*.*-t hello订阅者未收到来自发布者的已发送消息 在阅读了文档之后,打破了几个代理,我只得到了这样一个事

Publusher使用命令
mosquitto_pub-h 172.17.*.*-t hello-m“hello”
向主题
-t hello
发送消息。只有当与主题
-t hello
的连接处于活动状态时,订阅者才会看到消息
-m“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
,因为我认为主要的更改(当前问题的一个例子)只能通过它来实现

如何解决此问题,我希望在重新订阅主题时看到publisher发出的所有未收到的邮件?

您需要为邮件使用(服务质量)值。默认情况下,QOS设置为0,这基本上是触发并忘记,QOS 1是确保交付(但可能意味着多次交付)。QOS 2仅保证一次交付

需要指出的是,QOS介于1个客户端和代理之间,因此这可以是发布者和代理之间,也可以是代理和订阅者之间。(例如,您可以在QOS 0发布,然后在QOS 2订阅主题)

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

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

使用和,您可以使用
-q
选项设置QOS级别,也可以使用
-i
选项设置客户端id。要将mosquitto_sub的清除会话标志设置为false,您应该使用
-c
选项

您需要使用消息的(服务质量)值。默认情况下,QOS设置为0,这基本上是触发并忘记,QOS 1是确保交付(但可能意味着多次交付)。QOS 2仅保证一次交付

需要指出的是,QOS介于1个客户端和代理之间,因此这可以是发布者和代理之间,也可以是代理和订阅者之间。(例如,您可以在QOS 0发布,然后在QOS 2订阅主题)

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

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


使用和,您可以使用
-q
选项设置QOS级别,也可以使用
-i
选项设置客户端id。要为mosquitto_sub将clean session标志设置为false,您应该使用
-c
选项

hardillb,非常感谢,尽管我还没有尝试过这些方法。还有一个问题要问你-我需要为这个问题配置mosquitto.conf,或者在mosquitto_sub和mosquitto_pub级别上配置它的唯一解决方案?这取决于,如果你想让排队的消息在代理重启后存活下来,那么你需要确保mosquitto具有持久性启用项,我会很快尝试,并随“最后,你回答对了“markhardillb,非常感谢,尽管我还没有尝试过这些方法。还有一个问题要问你-我需要为这个问题配置mosquitto.conf,或者在mosquitto_sub和mosquitto_pub级别上配置它的唯一解决方案?这取决于,如果你想让排队的消息在代理重启后存活下来,那么你需要确保mosquitto具有持久性启用项,我会很快尝试,并随“最终正确答案”标记