(1)保留消息Retained Messages
MQTT中,無論是發布還是訂閱都不會有任何觸發事件。
1個Topic只有唯一的retain消息,Broker會保存每個Topic的最后一條retain消息。
每個Client訂閱Topic后會立即讀取到retain消息,不必要等待發送。
訂閱Topic時可以使用通配符,就會收到匹配的每個Topic的retain消息。
發布消息時把retain設置為true,即為保留信息。
如果需要刪除retain消息,可以發布一個空的retain消息,因為每個新的retain消息都會覆蓋最后一個retain消息。
主要應用:
1)如果訂閱者無法和Broker連接,可以通過retain消息讓訂閱者在下次成功連接時一次性接收所有的內容
2)發布者定時發布retain消息,訂閱者獲取該信息后能推測發布者的狀態(last good value)
(2)最后遺囑LWT(Last Will & Testament)
MQTT本身就是為信號不穩定的網絡設計的,所以難免一些客戶端會無故的和Broker斷開連接。
當客戶端連接到Broker時,可以指定LWT,Broker會定期檢測客戶端是否有異常。
當客戶端異常掉線時,Broker就往連接時指定的topic里推送當時指定的LWT消息。
LWT的相關信息在連接時可以設置:
LWT經常和保留消息一起使用,把每個客戶端的狀態保存到一個Topic下。
比如:可以在 client1/status 里保存online或者offline的信息。
pub_lwt.py
sub_lwt.py
執行以上 sub_lwt.py 和 pub_lwt.py 就會看到接收到兩條消息,最后一條就是LWT。
但是如果把pub_lwt.py里注釋的 client.disconnect() 放開,就接收不到LWT了。
