天天看點

mqtt session保持 訂閱消息_MQTT中的mosquitto簡單使用以及訂閱離線消息

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協定),是一種基于釋出/訂閱(publish/subscribe)模式的“輕量級”通訊協定,該協定建構于TCP/IP協定上,由IBM在1999年釋出。MQTT最大優點在于,可以以極少的代碼和有限的帶寬,為連接配接遠端裝置提供實時可靠的消息服務。作為一種低開銷、低帶寬占用的即時通訊協定,使其在物聯網、小型裝置、移動應用等方面有較廣泛的應用。

值得一提的是MQTT是一種通訊協定。而mosquitto是基于MQTT協定衍生的一個開源的broker。

mosquitto 下載下傳位址https://mosquitto.org/download/

mosquitto分為三個部分。pub(釋出者),broker(代理、伺服器),sub(訂閱者),他們之間的邏輯關系為pub->broker->sub;pub将發送主題和資訊發送給broker,sub從broker訂閱主題得到資訊;

簡單指令如下:

開啟mosquitto服務。cmd打開安裝完的mosquitto的路徑。輸入 mosquitto -c mosquitto.conf啟動mosquitto伺服器。

mqtt session保持 訂閱消息_MQTT中的mosquitto簡單使用以及訂閱離線消息

mosquitto的指令使用幫助

打開新的cmd到mosquitto路徑下輸入 mosquitto_pub -t topic -m message,這樣釋出者就釋出資訊成功了。需要指定主題topic 和資訊message。

mqtt session保持 訂閱消息_MQTT中的mosquitto簡單使用以及訂閱離線消息

mosquitto_pub指令幫助

mqtt session保持 訂閱消息_MQTT中的mosquitto簡單使用以及訂閱離線消息

mosquitto_pub指令幫助

再打開一個新的cmd進入到mosquitto的路徑下。輸入mosquitto_sub -t topic。就可以訂閱到剛剛釋出者釋出的資訊message了。

mqtt session保持 訂閱消息_MQTT中的mosquitto簡單使用以及訂閱離線消息

mosquitto_sub指令幫助

mqtt session保持 訂閱消息_MQTT中的mosquitto簡單使用以及訂閱離線消息

mosquitto_sub指令幫助

以上就是簡單的使用mosquitto。

以下是做到sub離線接收到pub釋出的資訊。

①開啟mosquitto伺服器時可以添加一個-v指令。可以在broker中列印出監控日志。mosquitto -c mosquitto.conf -v

②在pub釋出消息時需要綁定主題和釋出的資訊之外還需要指定Qos(服務品質),具體指令mosquitto_pub -t topic -m message -q 1

服務品質:MQTT 的設計初衷是為了在不可靠的網絡中運作良好,為不同的場景提供了三個級别的服務品質,允許用戶端指定自己想要的可靠性級别。QoS =0:至多一次這是最簡單的級别,無需用戶端确認,其可靠性與基礎網絡層 TCP/IP 一緻。QoS =1:至少一次,有可能重複確定至少向用戶端發送一次資訊,不過也可發送多次;在接收資料包時,需要用戶端傳回确認消息(ACK 包)。這種方式常用于傳遞確定傳遞的資訊,但開發人員必須確定其系統可以處理重複的資料包。QoS =2:隻有一次,確定消息隻到達一次這是最不常見的服務品質級别,確定消息發送且僅發送一次。這種方法需要交換4個資料包,同時也會降低消息代理的性能。由于相對比較複雜,在 MQTT 實作中通常會忽略這個級别,請確定在選擇資料庫或消息代理前檢查這個問題。

③此時sub線上狀态的話會直接接收到來自pub的資訊。如果此時sub處于離線狀态。想要在接受到pub釋出的資訊。需要讓clean_session置為false;在sub指令幫助中-c就是關閉clean_session的功能。同時需要-i(指定一個id),同樣Qos也指定為1。具體指令mosquitto_sub -t topic -c -i id -q 1。此時sub能夠接收到pub釋出的離線資訊。

在mosquitto.conf檔案中找到persistence選項,将persistence設定為true,在broker離線時能夠儲存此時pub和sub的資訊到.db檔案中。在broker重新開機之後将資料導入回broker。此時sub還能接收到離線的pub釋出的資訊。