物联网推送一般用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才能够连接代理服务器