簡體   English   中英

新訂閱時未使用 Mosquitto 的 QoS 1 消息

[英]Mosquitto's QoS 1 message not being consumed upon new subscription

很確定這是一個問題,可能總結了我對 MQTT 的(缺乏)理解,所以提前道歉。

我正在使用 MQTT 在兩台設備之間進行通信,並且通過使用 QoS 1,我希望我可以隨時發布消息,並且我的訂閱設備可以在下次連接時隨時接收該消息。

例如,我想發送以下消息:

mosquitto_pub -t switch/sign/switch -m "ahoy world!" --qos 1 -d

如果我有一個訂閱者已經訂閱了這個主題,那么它將使用該消息(並且這個位運作良好)。 但是,如果我不這樣做,則只要新客戶端訂閱該主題,就會使用該消息(至少這是我對 QoS 的理解)。

我的理解是,我應該立即通過訂閱來獲取消息:

mosquitto_sub -t switch/sign/switch --qos 1 -d

但是,當我訂閱時,我沒有收到任何消息。

希望能得到一些幫助。

謝謝

不,消息不會為新客戶端排隊,無論您在什么 QOS 上發布它們。

高 QOS 消息僅對已向代理注冊的持久 session 的現有客戶端進行排隊。 這是一個具有固定 clientId 的客戶端,並且在干凈的 session 標志設置為 false 的情況下重新連接。

mosquitto_sub命令每次運行時都會生成一個新的隨機 clientId,因此它不會重新連接到代理持有的現有持久 session。 它還默認清除 session true。

如果您運行以下命令:

mosquitto_sub -c -i fixedClientId -t switch/sign/switch --qos 1  

然后在發布測試消息之前斷開此客戶端(ctrl-c),然后再次運行mosquitto_sub命令,您應該會看到代理已為該特定客戶端將所有發布到該主題的消息排隊。

您可以在此處閱讀有關高 QOS 消息隊列和持久會話的更多信息

另一種選擇是發布保留的消息。 當消息發布時將保留標志設置為 true,代理將保留給定主題的最后一個保留,並在任何客戶端訂閱該主題時立即交付。 這只是一條消息,每次代理接收到該主題的設置了保留位的消息時都會替換它。 您可以在此處閱讀有關保留消息的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM