物聯網推送一般用mqtt協議,其中用到最多的且相對成熟的有EMQ
官網文檔是最好的老師,對於大型企業用到的應該是付費版本,目前本人經歷過得幾百人的公司和幾個創業型公司用的都是免費版本,且商用。
下面是自己搭建的一些記錄,可以參考
環境 ubuntu16.04 版本emq3.0
- 建議
初步接觸mqtt的情況下務必先了解mqtt的工作流程,是做什麼的,原理是什麼。對於emq的初步使用看文檔即可。
emq無非是對mqtt的封裝,一個代理服務器,類似的MQ其實很多,但是物聯網一般用的是mqtt。
部署流程
- 下載 安裝 下載地址
我是這麼做的,emqx-ubuntu16.04-v3.0.1.zip 將下載包,下載下來上傳到服務器後,解壓到 /opt/emqx目錄下
- 啓動並初步使用 參考內容
進入bin目錄,啓動起來,emqx還提供了可視化的DashBoard面板
# 啓動emqx
./bin/emqx start
# 檢查運行狀態
./bin/emqx_ctl status
可以看到如下內容
root@iZj6cdb3lulnsqtqr01tmvZ:/opt/emqx/bin# ./emqx_ctl status
Usage: emqx_ctl
--------------------------------------------------------------------------------
recon memory # recon_alloc:memory/2
recon allocated # recon_alloc:memory(allocated_types, current|max)
recon bin_leak # recon:bin_leak(100)
recon node_stats # recon:node_stats(10, 1000)
recon remote_load Mod # recon:remote_load(Mod)
--------------------------------------------------------------------------------
retainer info # Show the count of retained messages
retainer topics # Show all topics of retained messages
retainer clean # Clean all retained messages
--------------------------------------------------------------------------------
admins add <Username> <Password> <Tags> # Add dashboard user
admins passwd <Username> <Password> # Reset dashboard user password
admins del <Username> # Delete dashboard user
root@iZj6cdb3lulnsqtqr01tmvZ:/opt/emqx/bin#
訪問http:ip/port
- 設置認證
就是用什麼來實現消息代理服務器emq的登錄,官網提供的認證方式很多。認證內容參考
我本人直接用數據庫,mysql認證
- 關閉匿名登錄
修改emq.conf(文件在你安裝EMQ目錄的./etc中)
root@iZj6cdb3lulnsqtqr01tmvZ:/opt/emqx# cd etc/
root@iZj6cdb3lulnsqtqr01tmvZ:/opt/emqx/etc# ls -l
total 76
-rw-r--r-- 1 root root 839 Jan 25 06:54 acl.conf
drwxr-xr-x 2 root root 4096 Jan 25 06:55 certs
-rw-r--r-- 1 root root 51989 Jan 25 06:54 emqx.conf
drwxr-xr-x 2 root root 4096 Jan 25 06:55 lwm2m_xml
drwxr-xr-x 2 root root 4096 Feb 15 18:18 plugins
-rw-r--r-- 1 root root 421 Jan 25 06:54 ssl_dist.conf
-rw-r--r-- 1 root root 2748 Jan 25 06:54 vm.args
root@iZj6cdb3lulnsqtqr01tmvZ:/opt/emqx/etc#
配置zone.internal.allow_anonymous = true 值改爲false
allow_anonymous =true 值改爲false
zone.internal.allow_anonymous = false
allow_anonymous =false
這個文件很長,不太容易找到這個配置,需要文件中直接查找到這個關鍵字段即可。
- 創建表,創建mqtt_user表
CREATE TABLE `mqtt_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`salt` varchar(20) DEFAULT NULL,
`is_superuser` tinyint(1) DEFAULT 0,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- 配置
修改 etc/plugins/emqx_auth_mysql.conf 配置
auth.mysql.server = MYSQL_SERVER_IP:PORT // mysql服務器地址,例如:127.0.0.1:3306
auth.mysql.username = USERNAME // mysql登錄用戶名
auth.mysql.password = PWD // mysql登錄密碼
auth.mysql.database = DATABASE_NAME // 默認使用庫
是否加密處理
## Value: plain | md5 | sha | sha256 | bcrypt
auth.mysql.password_hash = plain
4.啓用插件
啓用 MySQL 認證插件:
./bin/emqx_ctl plugins load emqx_auth_mysql
如果這個命令失敗,那麼直接在Dashboard 上面,start mysql插件即可。
點擊原來的start按鈕即可。
這樣配置了mysql的認證,只有在對應的表中有的user/pwd才能夠連接代理服務器