MQTT Broker mosquitto

MQTT

全稱

MQ Telemetry Transport 消息隊列遙測傳輸協議
IBM 1994開發
MQTT v3.1.1 第4版 OASIS標準
1 to 0/1/Nhtml

簡介

MQTT是一個TCP服務端,稱爲broker。
經過這個broker服務,咱們能夠做爲發佈者,發送一條主題消息給broker,而後其餘訂閱者經過消息訂閱機制得到broker的主題消息推送。咱們也能夠做爲訂閱者,訂閱其餘發佈者的主題消息。web

對比MQ

消息隊列存儲消息,直到它們被消耗
消息隊列中只有一個消費者處理消息,MQTT中訂閱主題的每一個訂閱者都會收到消息
消息隊列要提早並明確建立,MQTT中能夠隨時實時建立redis

議題

  • 自動重連 Automatic Reconnect
  • 離線緩存 Offline Buffering
  • 消息持久化 Message Persistence
  • 高可用 High Availability
  • 安全 SSL/TLS
  • websocket支持

鏈接

創建

broker開啓一個host的TCP 1883端口
客戶端鏈接Broker
若是是重連,須要帶上上次ClientID
若是不是重連,能夠指定CleanSession是否清空以前會話
能夠指定兩端之間心跳維持時間
服務端根據參數,重用或開啓會話Session,綁定ClientID
一個會話,能夠服務多個TCP鏈接,取決因而否CleanSession緩存

會話

PersistentSession與CleanSession
session相關信息將會同時保存在broker和client中,session裏包含如下內容:
客戶端的訂閱信息
從broker接收來的尚未ack的消息
發送給client的尚未ack的消息安全

斷開

客戶端主動斷開:客戶端發送 DISCONNECT 關閉連接,遺囑失效並刪除
客戶端異常斷開:遺囑消息發佈服務器

消息

消息類型

心跳消息
鏈接、斷開鏈接消息 10 e0
訂閱、取消訂閱消息 80
發佈消息 30websocket

遺囑消息

爲了能知道哪一個客戶端異常斷開,broker定時查詢客戶端狀態。
當檢查到客戶端異常斷開時,就發佈客戶端鏈接時指定的遺囑消息到指定主題。
正常斷開,是不會有遺囑消息發佈的。session

保留消息

發佈者發佈主題消息時,能夠指定消息是否緩存到broker,做爲對應主題的最後一次消息記錄
訂閱者鏈接後,可一次性獲取想要的主題的所有保留消息socket

主題

分層過濾格式

樹狀結構,用'/'分隔,如:home/light/brightness
通配符:code

  • 單層通配符 如,a/b/+」 匹配 「a/b/c1」 和 「a/b/c2」,可是不匹配 「a/b/c/d」
    # 多層通配符 如 「a/b/c/#" 能夠匹配 「a/b/c」、「a/b/c/d」 和 「a/b/c/d/e」

特殊的主題$SYS

查看服務器的狀態信息

消息分發可靠性QoS

  • 至多一次 容許丟失,無需回覆訂閱者回復,發佈者自動刪除。適用傳感器數據
  • 至少一次 確保到達,須要訂閱者回復,發佈者和broker都緩存消息,待訂閱者回復後,再依次刪除消息緩存。可能重複發送
  • 只有一次 確保到達,不重複不丟失,用的不多
    圖示

消息發佈與訂閱

基於主題的消息過濾,可使用通配符來訂閱多個主題的消息
發佈消息時,不可使用通配符,必須指定完整的topic名
若是想發送給多個topic,須要發佈屢次
發佈者在每次發佈消息時都須要設置QoS

消息存儲

可使用基於內存的,可是單點故障狀況下,消息會丟失。
能夠結合外部redis,進行消息外部存儲。

redis消息持久化配置

storage_class io.moquette.persistence.redis.RedisStorageService 

# redis storage
redis.host localhost
redis.port 6379
redis.password
redis.database 0
redis.prefix monitor:
相關文章
相關標籤/搜索