MQTT躍躍欲試

1.EMQ X

官網地址:https://www.emqx.io/cn/

在上篇 MQTT初入門 中介紹了MQTT,列出了 eclipse-mosquitto 實現MQTT後對外提供的服務產生的一些問題,後面又找了一個MQTT的開源實現 EMQ X,EMQ X解決了mosquitto的問題,而且有中文文檔

MQTT只是一個網絡協議,需要一個消息中間件,目前比較有名的有Mosquitto,Apollo,RabbitMQ,Emqx等,本篇使用Emqx,使用的是docker emqx 鏡像

EMQ X R3.2 (Erlang/Enterprise/Elastic MQTT Broker) 是基於 Erlang/OTP 語言平臺開發,支持大規模連接和分佈式集羣,發佈訂閱模式的開源 MQTT 消息服務器,文檔地址:https://docs.emqx.io/docs/broker/v3/cn/

EMQ X 消息服務器完整支持 MQTT V3.1/V3.1.1/V5.0 版本協議規範,並擴展支持 MQTT-SN 、WebSocket、CoAP、LwM2M、Stomp 以及私有 TCP/UDP 協議。EMQ X 消息服務器支持單節點100萬連接與多節點分佈式集羣。爲大規模設備連接 (C1000K+) 的物聯網、車聯網、智能硬件、移動推送、移動消息等應用,提供完全開放源碼、安裝部署簡便、企業級穩定可靠、可彈性擴展、易於定製開發的 MQTT 消息服務器。

在這裏插入圖片描述

2.使用docker安裝 EMQ X

匿名模式運行emqx,沒有認證,任何人都能訪問

docker run -it -d --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 emqx/emqx:latest
# -it 運行爲容器後可以進入容器
# -d 後臺啓動
# --name 容器的名稱爲 emqx
# -p 宿主機的端口與容器的端口進行綁定,18083爲emqx dashboard控制檯,1883爲emqx tcp協議地址,8083爲emqx websocket地址 

容器啓動後,在瀏覽器訪問 dashboard控制檯: http://127.0.0.1:18083,默認用戶名: admin,密碼:public
在這裏插入圖片描述

3.瀏覽器websocket測試

emqx dashboard自動websocket工具,輸入用戶名和密碼,點擊連接,可看到當前狀態:已連接
在這裏插入圖片描述
下面有訂閱和發佈,訂閱一個主題,然後向該主題發佈消息,可看到訂閱成功和發佈成功的提示,下面有收到訂閱消息的時間

在這裏插入圖片描述

4.android app測試

MQTT的客戶端有 Eclipse Paho: https://www.eclipse.org/paho/
Paho的android庫是:https://github.com/eclipse/paho.mqtt.android
在Gradle中引入paho sdk,寫上連接MQTT服務的代碼,然後打包到android手機上

repositories {
    maven {
        url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
    }
}
dependencies {
    compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
    compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
}

#其餘代碼部分就省略了

運行效果如下:
在這裏插入圖片描述
向352019040642849主題發送消息:zhi lian gu
在這裏插入圖片描述
app收到了發佈的消息
在這裏插入圖片描述

5.使用認證模式訪問MQTT 提升安全性

上面的emqx默認是 匿名模式啓動的,任何人都能訪問,在開發、測試環境時可以使用,但到正式環境則會有安全性問題,下面簡要談談怎麼開啓Username認證模式,只有認證的用戶可連接MQTT,具體可以參考 emqx 官方文檔—>配置說明章節

allow_anonymous默認等於true,默認是匿名模式,通過啓動參數配置爲false,關閉匿名模式
emqx的認證是通過plugins插件實現的,可通過啓用插件,來實現認證,啓用 emqx_auth_username 插件

新的啓動命令如下:

docker run -it -d --rm --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 \
-e EMQX_ALLOW_ANONYMOUS=false \
-e EMQX_LOADED_PLUGINS="emqx_auth_username,emqx_management,emqx_dashboard" \
emqx/emqx:latest

運行爲容器後,進入emqx容器:docker exec -it emqx sh

#使用emqx_ctl 命令添加test用戶,密碼爲test123
emqx_ctl users add test test123

#下面命令是操作用戶的
emqx_ctl users
emqx_ctl users list
emqx_ctl users add <Username> <Password>
emqx_ctl users update <Username> <NewPassword>
emqx_ctl users del <Username>

然後就可以使用 test test123連接 mqtt 服務了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章