引言
MQTT(Message Queuing Telemetry Transport,訊息佇列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支援所有平臺,幾乎可以把所有聯網物品和外部連線起來,被用來當做感測器和制動器(比如通過Twitter讓房屋聯網)的通訊協議。
EMQ是國人開源的高效能MQTT服務端,支援百萬級連線
Emq官網提供了Linux,Windows,Mac的原生安裝包,這裡我們通過Docker搭建
映象獲取方式:
- Emq官網下載,通過docker的load命令匯入
- Emq官方QingCloud映象
- 阿里雲映象
具體步驟
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
可以看到已經出現了這個chat主題,而且客戶端的連線也已經建立了- 然後執行釋出程式碼
後記
MQTT作為物聯網開源協議,同時支援高質量的Qos,可以用在大部分物聯網通訊場景,進行APP定位,訊息推送等功能,下面的文章我會接入kafka來進行物聯網訊息推送,並通過kafka進行聚合、採集訊息。