百萬級併發EMQ的Docker搭建和使用

花名劍氣長發表於2018-09-18
百萬級併發EMQ的Docker搭建和使用

引言

MQTT(Message Queuing Telemetry Transport,訊息佇列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支援所有平臺,幾乎可以把所有聯網物品和外部連線起來,被用來當做感測器和制動器(比如通過Twitter讓房屋聯網)的通訊協議。

EMQ是國人開源的高效能MQTT服務端,支援百萬級連線

Emq官網提供了Linux,Windows,Mac的原生安裝包,這裡我們通過Docker搭建

映象獲取方式:

  1. Emq官網下載,通過docker的load命令匯入
  2. Emq官方QingCloud映象
  3. 阿里雲映象

具體步驟

1.拉取映象

這裡選擇阿里雲映象
可以直接通過docker命令拉取映象
docker pull registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6

2.執行映象

docker run --name emq -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 -d registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6
映象配置說明:
- 防火牆開啟1883(MQTT)
- 8083(WebSocket)
- 18083(Dashboard控制檯)埠
- Dashboard 控制檯,預設管理員: admin, 密碼: public
- 在瀏覽器中輸入 http:192.168.99.100:18083進入Web控制檯,使用者名稱:admin 密碼:public

映像預設允許1萬線 MQTT 連線,最大可配置到10萬線。映像記憶體佔用: 5萬連線/1G記憶體(from官方文件)

3.釋出

因為mqtt本身是釋出訂閱模型,  
複製程式碼

這裡我們使用python作為服務端釋出(主要是簡單?),需要引入paho包

import paho.mqtt.client as mqtt

HOST = "127.0.0.1"�
PORT = 1883


def pub():
    client = mqtt.Client()
    client.connect(HOST, PORT, 60)
    client.publish("chat", "hello", 2)  # 釋出一個主題為'chat',內容為‘hello liefyuan’的資訊
    client.loop_forever()


if __name__ == '__main__':
    pub()
複製程式碼

4.訂閱

依舊先上python程式碼

import paho.mqtt.client as mqtt

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("chat")

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

if __name__ == '__main__':
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message

    client.connect("127.0.0.1", 1883, 60)
    client.loop_forever()
複製程式碼

5.測試

  • 先執行訂閱程式碼

檢視web端的Dashboard

百萬級併發EMQ的Docker搭建和使用
百萬級併發EMQ的Docker搭建和使用
可以看到已經出現了這個chat主題,而且客戶端的連線也已經建立了

  • 然後執行釋出程式碼

百萬級併發EMQ的Docker搭建和使用
已經收到了訊息,現在開啟Dashboard也可以看到連線數從1變成了2,並且出現了sent和receive事件

後記

MQTT作為物聯網開源協議,同時支援高質量的Qos,可以用在大部分物聯網通訊場景,進行APP定位,訊息推送等功能,下面的文章我會接入kafka來進行物聯網訊息推送,並通過kafka進行聚合、採集訊息。

相關文章