使用新订阅者连接(MQTT / Mosquitto)显示来自发布者的错过消息
Display of the missed messages from the publisher with a new subscriber connection (MQTT / Mosquitto)
发布者使用命令 mosquitto_pub -h 172.17.*.* -t hello -m "hello" -d
向主题 -t hello
发送消息 -m "hello"
。仅当与主题 -t hello
的连接处于活动状态时,订阅者才会看到消息 -m "hello"
。但是,如果订阅者未订阅 -t hello
主题并且发布者仍然在 -t hello
主题上发送消息,那么当您尝试订阅该主题时 mosquitto_sub -h 172.17. *. * -t hello
订阅者不会收到发送的消息来自发布者的消息。
阅读文档后,打破了几个代理,我只实现了这样一个事实:如果你像这样 - -mosquitto_pub -h 172.17. *. * -r -t hello -m "hello"
将标志放在发布者 -r
上,你可以看到最后一条消息。我配置了mosquitto.conf
,因为我认为主要的变化,当前问题的一个例子,只能通过它来实现
如何解决这样的问题,我想在重新订阅主题时看到发布者所有错过的消息?
您需要为消息使用 QOS(服务质量)值。默认情况下,QOS 设置为 0,这基本上是即发即忘,QOS 1 是确保交付(但可能意味着交付不止一次)。 QOS 2 只保证传递一次。
需要指出的是,QOS 是在 1 个客户端和代理之间,因此这可以在发布者和代理之间,或者代理和订阅者之间独立。 (例如,您可以发布 QOS 0,然后订阅 QOS 2 的主题)。
对于离线客户端的消息队列,客户端需要以 QOS 1 或 QOS 2 进行订阅,并且当它重新连接时需要将其 cleanSession 标志设置为 false
并使用相同的客户端 ID。
MQTT 代理不会为以前从未连接过的客户端排队消息。
使用 mosquitto_sub and mosquitto_pub,您可以使用 -q
选项设置 QOS 级别,您可以使用 -i
选项设置客户端 ID。要将 mosquitto_sub 的清理会话标志设置为 false,您应该使用 -c
选项
发布者使用命令 mosquitto_pub -h 172.17.*.* -t hello -m "hello" -d
向主题 -t hello
发送消息 -m "hello"
。仅当与主题 -t hello
的连接处于活动状态时,订阅者才会看到消息 -m "hello"
。但是,如果订阅者未订阅 -t hello
主题并且发布者仍然在 -t hello
主题上发送消息,那么当您尝试订阅该主题时 mosquitto_sub -h 172.17. *. * -t hello
订阅者不会收到发送的消息来自发布者的消息。
阅读文档后,打破了几个代理,我只实现了这样一个事实:如果你像这样 - -mosquitto_pub -h 172.17. *. * -r -t hello -m "hello"
将标志放在发布者 -r
上,你可以看到最后一条消息。我配置了mosquitto.conf
,因为我认为主要的变化,当前问题的一个例子,只能通过它来实现
如何解决这样的问题,我想在重新订阅主题时看到发布者所有错过的消息?
您需要为消息使用 QOS(服务质量)值。默认情况下,QOS 设置为 0,这基本上是即发即忘,QOS 1 是确保交付(但可能意味着交付不止一次)。 QOS 2 只保证传递一次。
需要指出的是,QOS 是在 1 个客户端和代理之间,因此这可以在发布者和代理之间,或者代理和订阅者之间独立。 (例如,您可以发布 QOS 0,然后订阅 QOS 2 的主题)。
对于离线客户端的消息队列,客户端需要以 QOS 1 或 QOS 2 进行订阅,并且当它重新连接时需要将其 cleanSession 标志设置为 false
并使用相同的客户端 ID。
MQTT 代理不会为以前从未连接过的客户端排队消息。
使用 mosquitto_sub and mosquitto_pub,您可以使用 -q
选项设置 QOS 级别,您可以使用 -i
选项设置客户端 ID。要将 mosquitto_sub 的清理会话标志设置为 false,您应该使用 -c
选项