1密强、在阿里云購買云服務(wù)器或者虛擬機(jī)安裝Linux蝌焚。
??關(guān)于linux系統(tǒng)裹唆,可以在阿里云購買云服務(wù)器或者利用虛擬機(jī)安裝CentOs系統(tǒng)誓斥。我用的就是阿里云的云服務(wù)器只洒,比較方便吧。
2劳坑、安裝Emqx
安裝必要的依賴:
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
設(shè)置穩(wěn)定的倉庫毕谴,比如CentOs7的例子:
$sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/7/emqx-ce.repo
安裝最新版本的 EMQ X
$ sudo yum install emqx
也可以安裝指定版本
先查詢軟件版本列表
$ yum list emqx --showduplicates | sort -r
emqx.x86_64 3.1.0-1.el7 emqx-stable
emqx.x86_64 3.0.1-1.el7 emqx-stable
emqx.x86_64 3.0.0-1.el7 emqx-stable
選擇其中一個(gè)版本安裝
$ sudo yum install emqx-3.1.0
4、啟動(dòng)Emqx
直接啟動(dòng)
$ emqx start
emqx 3.1.0 is started successfully!
$ emqx_ctl status
Node 'emqx@127.0.0.1' is started
emqx v3.1.0 is running
系統(tǒng)啟動(dòng)
$ sudo systemctl start emqx
服務(wù)啟動(dòng)
$ sudo service emqx start
5距芬、訪問Web后臺(tái)界面
??在訪問后臺(tái)界面時(shí)涝开,應(yīng)該先開放Emqx對應(yīng)的端口。如下:
端口 端口對應(yīng)的協(xié)議或者作用
1883 MQTT protocol port
8883 MQTT/SSL port
8083 MQTT/WebSocket port
8080 HTTP API port
18083 Dashboard Management Console Port
??在虛擬機(jī)安裝的Linux 則使用該方式放開端口:
iptables -A INPUT -ptcp --dport 1883 -j ACCEPT
iptables -A INPUT -ptcp --dport 8883 -j ACCEPT
iptables -A INPUT -ptcp --dport 8083 -j ACCEPT
iptables -A INPUT -ptcp --dport 8080 -j ACCEPT
iptables -A INPUT -ptcp --dport 18083 -j ACCEPT
保存操作
service iptables save
??在阿里云則在對應(yīng)的云服務(wù)器的安全組中添加對應(yīng)的開放端口框仔。如下操作:
??登錄阿里云后臺(tái)->進(jìn)入控制臺(tái)->點(diǎn)擊云服務(wù)器ECS->實(shí)例列表中找到響應(yīng)的示例->點(diǎn)擊更多->
找到網(wǎng)絡(luò)和安全組->點(diǎn)擊安全組配置->看見響應(yīng)的安全組列表舀武,然后點(diǎn)擊配置規(guī)則->在出入方向 中都添加如下配置
??訪問后臺(tái)地址:http://localhost:18083离斩,其中l(wèi)ocalhost可以替換為你的云服務(wù)器公網(wǎng)IP或者虛擬機(jī)IP银舱。登錄賬號(hào):admin,密碼:public跛梗。進(jìn)入Web管理控制臺(tái)寻馏。如下圖所示:
6核偿、測試Emqx 服務(wù)是否可用
??本次用到的測試工具是常見的MQTTBox
??MQTTBox官網(wǎng)下載地址:http://workswithweb.com/html/mqttbox/downloads.html
??下載完成后诚欠,直接安裝即可。
??安裝完成后打開客戶端漾岳,如下所示:
??點(diǎn)擊"Create MQTT Client"后,顯示如下:
??上圖中尼荆,在ClientName中填上客戶端名稱左腔,比如Test_Client;在Protocol中選擇 'mqtt/tcp' 這個(gè)選項(xiàng);在Host 中填上 127.0.0.1:1883,其中127.0.0.1需要替換成自己的與服務(wù)器公網(wǎng)IP或者虛擬機(jī)IP耀找。點(diǎn)擊save翔悠,進(jìn)入如下界面:
??應(yīng)先開啟一個(gè)訂閱野芒,如上圖所示蓄愁。"Topic to subscribe" 里填入要訂閱的主題"test";"QoS" 字段選擇 "0 - Almost Once" 狞悲;然后點(diǎn)擊 "Subscribe" 按鈕撮抓。
??后發(fā)布一條消息,如上圖所示摇锋。"Topic to publish" 中輸入 "test" 丹拯,這里輸入的主題的名字必須和訂閱那里的輸入相同站超;"QoS" 中選擇 "0 - Almost Once" ;"Payload" 中輸入任何內(nèi)容都可以乖酬,如下圖所示輸入了一組JSON字符串死相;所有內(nèi)容輸入完畢之后,點(diǎn)擊"Publish"按鈕咬像。測試成功如下圖顯示:
??測試成功,說明Emqx服務(wù)可用县昂,接下來應(yīng)該測試用于設(shè)備上了肮柜。這邊打算引用的ClientSDK 為Java 語言的 MqttClient。
??MqttClient 的GitHub地址:https://github.com/fusesource/mqtt-client 倒彰。
7审洞、應(yīng)用MqttClient-Java SDK
??1.Maven中引入如下依賴:
<dependency>
<groupId>org.fusesource.mqtt-client</groupId>
<artifactId>mqtt-client</artifactId>
<version>1.9</version>
</dependency>
??2.創(chuàng)建一個(gè)MqttSubscriber.java 文件,代碼如下:
public class MqttSubscriber {
/**
* MQTT 的 IP 地址
*/
public static final String MQTT_SERVER_URL="x.x.x.x";
public static void main(String[] args) throws Exception {
MQTT mqtt = new MQTT();
mqtt.setHost(MQTT_SERVER_URL, 1883);
BlockingConnection connection = mqtt.blockingConnection();
connection.connect();
Topic[] topics = {new Topic("Java_Test", QoS.AT_LEAST_ONCE)};
byte[] qoses = connection.subscribe(topics);
Message message = connection.receive();
System.out.println(message.getTopic());
byte[] payload = message.getPayload();
System.out.println("打印接收到的消息:"+new String(payload));
message.ack();
connection.disconnect();
}
}
&esmp;?3.創(chuàng)建一個(gè)MqttPublisher.java 文件待讳,代碼如下:
public class MqttPublisher {
public static void main(String[] args) throws Exception {
MQTT mqtt = new MQTT();
mqtt.setHost(MqttSubscriber.MQTT_SERVER_URL, 1883);
BlockingConnection connection = mqtt.blockingConnection();
connection.connect();
connection.publish("Java_Test", "Java".getBytes(), QoS.AT_LEAST_ONCE, true);
System.out.println("執(zhí)行發(fā)送消息芒澜。。耙箍。撰糠。");
}
}
??4.先執(zhí)行MqttSubscriber的main函數(shù),后執(zhí)行MqttPublisher的main函數(shù)辩昆。測試成功后控制帶輸出如下圖所示:
8汁针、總結(jié)
??EMQ X 是一個(gè)為移動(dòng)互聯(lián)和物聯(lián)網(wǎng)設(shè)計(jì)的輕量級(jí)的publish-subscribe消息中間件术辐。支持當(dāng)前主流的 MQTT v3.1.1 and v5.0。示意圖如下:
??這邊只是對MQTT的一些粗淺應(yīng)用和認(rèn)識(shí)辉词,如果想對EMQ X有更深入的了解,可以觀看其項(xiàng)目官方文檔:https://docs.emqx.io/broker/v3/en/guide.html 猾骡。
一些參考資料:
EMQ X官方文檔:https://docs.emqx.io/broker/v3/en/guide.html
Mqtt_Box官方文檔:http://workswithweb.com/html/mqttbox/getstarted.html
Mqtt_Client GitHub:https://github.com/fusesource/mqtt-client
Mqtt GitHub:https://github.com/mqtt/mqtt.github.io