MQTT 服務器介紹

MQTT 發佈訂閱模式簡述

MQTT 是基於 發佈(Publish)/訂閱(Subscribe) 模式來進行通訊及數據交換的,與 HTTP 的 請求(Request)/應答(Response) 的模式有本質的不一樣。git

訂閱者(Subscriber) 會向 消息服務器(Broker) 訂閱一個 主題(Topic) 。成功訂閱後,消息服務器會將該主題下的消息轉發給全部的訂閱者。github

主題(Topic)以 ‘/’ 爲分隔符區分不一樣的層級。包含通配符 ‘+’ 或 ‘#’ 的主題又稱爲 主題過濾器(Topic Filters),不含通配符的稱爲 主題名(Topic Names) 。例如:數據庫

sensor/1/temperature

sensor/1/#

sensor/+/temperature

MQTT Broker 簡介

MQTT Broker 定義及其做用

MQTT Broker 也稱爲 MQTT 消息服務器,它能夠是運行了 MQTT 消息服務器軟件的一臺服務器或一個服務器集羣。MQTT Broker 負責接收來自客戶端的網絡鏈接,並處理客戶端的訂閱/取消訂閱(Subscribe/Unsubscribe)、消息發佈(Publish)請求,同時也會將客戶端發佈的消息轉發給其餘訂閱者。瀏覽器

MQTT Broker 普遍應用於:電力、新能源、智慧城市、智能家居、智能抄表、車聯網、金融與支付、運營商等行業。安全

mqtt-broker.png

常見開源 MQTT Broker

  • EMQ X - EMQ X 基於 Erlang/OTP 平臺開發,是開源社區中最流行的 MQTT 消息服務器。除了 MQTT 協議以外,EMQ X 還支持 MQTT-SN、CoAP、LwM2M、STOMP 等協議。目前,EMQ X 在全球市場已有 5000+ 企業用戶,20+ 世界五百強合做夥伴。
  • Eclipse Mosquitto - Mosquitto 是開源時間較早的 MQTT Broker,它包含了一個C/C ++的客戶端庫,以及用於發佈和訂閱的 mosquitto_pubmosquitto_sub 命令行客戶端。Mosquitto 比較輕量,適合在從低功耗單板計算機到完整服務器的全部設備上使用。
  • VerneMQ - VerneMQ 基於 Erlang/OTP 平臺開發,是高性能的分佈式 MQTT 消息代理。它能夠在硬件上水平和垂直擴展,以支持大量併發客戶端,同時保持較低的延遲和容錯能力。
  • HiveMQ CE - HiveMQ CE 是基於 Java 的開源 MQTT 消息服務器,它徹底支持 MQTT 3.x 和 MQTT 5,是 HiveMQ 企業版消息鏈接平臺的基礎。

MQTT Broker 實現的主要功能

協議接入

  • 完整的 MQTT V3.1/V3.1.1 及 V5.0 協議規範支持;
  • MQTT-SN 、CoAP、lwM2M 等物聯網協議接入支持。

集羣部署

多服務器節點集羣,且支持節點的自動發現。相對於單服務器,集羣能經過多臺服務器之間的協做帶來如下優點:服務器

  • 高可用性。單臺或少許的服務器故障並不會致使整個消息服務中斷,其他的正常工做的節點能夠繼續提供服務;
  • 負載均衡。經過負載均衡機制,集羣能夠把負載平均的分佈在各個節點;
  • 更高的總體性能。相比單機部署,多節點的集羣可以成倍的提高整個系統的鏈接和消息處理能力;
  • 可擴展性。能夠經過在集羣中添加新節點的方式來完成擴容而無需停機。

接入安全

  • SSL、WSS 加密鏈接,及單/雙向安全認證支持;
  • 客戶端 ID、IP 地址、用戶名密碼、LDAP 及瀏覽器 Cookie 認證支持;
  • 基於客戶端 ID、IP 地址、用戶名的訪問控制(ACL);
  • 消息速率、鏈接速率限制。

數據持久化

數據持久化的主要使用場景包括將客戶端上下線狀態,訂閱主題信息,消息內容,消息抵達後發送消息回執等操做記錄到 Redis、MySQL、PostgreSQL、MongoDB、Cassandra 等各類數據庫中。網絡

其餘功能

  • HTTP 消息發佈接口支持,使上層應用能更方便的經過 REST API 給設備發送消息;
  • MQTT Broker 橋接,支持不一樣 MQTT Broker 或不一樣集羣之間的消息橋接。橋接能夠很方便的將消息橋接到雲服務、流式服務、或其餘 MQTT 消息服務器。橋接能夠完成一些單純使用集羣沒法實現的功能:跨 VPC 部署、支持異構節點、提升單個應用的服務上限;
  • 支持共享訂閱。共享訂閱是一種機制,容許將訂閱組的消息分發均勻地分發給訂閱組成員。在共享訂閱中,訂閱同一主題的客戶機依次接收此主題下的消息。同一消息不會發送給多個訂閱客戶端,從而實現多個訂閱客戶端之間的負載均衡;
  • 規則引擎支持,用於配置消息流與設備事件的處理、響應規則。規則描述了數據從哪裏來如何篩選並處理數據處理結果到哪裏去三個配置,即一條可用的規則包含三個要素:觸發事件(知足某個條件時觸發)、處理規則(從上下文信息中過濾和處理數據)、響應動做(如持久化到數據庫、從新發布處理後的消息、轉發消息到消息隊列等)。

MQTT Broker 的使用

爲了方便測試,咱們使用 EMQ 提供的線上版 Broker,該 Broker 版本包含了 EMQ X Enterprise 的全部功能。併發

Broker 地址: broker.emqx.io

Broker 端口: 188三、8883(SSL)、8083(Websocket)、8084(WSS)負載均衡

鏈接客戶端咱們使用 EMQ 提供的線上版 Websocket 工具:http://tools.emqx.iosocket

MQTT Broker 的鏈接

使用瀏覽器打開地址 http://tools.emqx.io,點擊左下角的 New Connection 按鈕,並在右側框裏填寫連接信息,填寫好必填字段後點擊 Connect 按鈕建立連接並鏈接至 Broker。

1.png

消息發佈

鏈接成功後,點擊右下角的 Write a message 彈出消息發佈框,填寫好 TopicPayload 後點擊發送圖標便可發佈消息。

2.png

主題訂閱

  • 訂閱普通主題

    在中間的 Subscriptions 模塊裏,訂閱 hello 主題。此時給 hello 主題發送消息的話,消息列表裏會收到該消息(左側爲接收到的消息)。

3.png

  • 訂閱通配符主題

    訂閱通配符主題 testtopic/#,並給 testtopic/1 主題發送消息,此時消息列表裏會接收到該消息。

image-20191021164555568.png


更多信息請訪問咱們的官網 emqx.io,或關注咱們的開源項目 github.com/emqx/emqx ,詳細文檔請訪問 官方文檔

相關文章
相關標籤/搜索