基于MQTT协议及EMQ搭建物联网平台
一、部署EMQX
我的EMQ是部署在docker中,首先在lunix中拉取emqx 镜像(使用下列命令直接拉取镜像并运行)
$ docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.0
使用docker ps 查看docker 中运行的程序
打开配置文件修改publish和custom注册时的认证路径和方式(这里使用的是http认证)
打开路径 [root@iZbp1ib9bacluv0s1eh8xhZ ~]# docker exec -it 3c6 /bin/sh
# docker exec -it 3c6 /bin/sh
在安装目录中,把EMQ X 的默认匿名认证关闭 修改为 allow_anonymous = false
修改完成匿名认证之后,根据自己项目需求选取哪种认证(MongoDB、Http等)进行相应配置文件信息的配置。
我这里使用的是http认证
修改http认证中的配置(修改如下:认证请求)
/opt/emqx/etc/plugins $ vi emqx_auth_http.conf
认证请求:
进行身份认证时,EMQX 将使用当前客户端信息填充并发起用户配置的认证查询请求,查询出该客户端在 HTTP 服务器端的认证数据。
这里 auth.http.auth_req = http://127.0.0.1:80/mqtt/auth 是代码中的用户登录信息校验的接口。(**注意:**因为我的EMQ配置在docker中(阿里云服务器),这里想和本地代码打通的话,实现http跳转成功,需要进行ip映射(我这里使用的花生壳))
# etc/plugins/emqx_auth_http.conf
## 请求地址
auth.http.auth_req = http://127.0.0.1:80/mqtt/auth
## HTTP 请求方法
## Value: post | get | put
auth.http.auth_req.method = post
## 认证请求的 HTTP 请求头部,默认情况下配置 Content-Type 头部。
## Content-Type 头部目前支持以下值:application/x-www-form-urlencoded,application/json
auth.http.auth_req.headers.content-type = application/x-www-form-urlencoded
## 请求参数
auth.http.auth_req.params = clientid=%c,username=%u,password=%P
HTTP 请求方法为 GET 时,请求参数将以 URL 查询字符串的形式传递;POST、PUT 请求则将请求参数以普通表单形式或者以 Json 形式提交(由 content-type 的值决定)。
你可以在认证请求中使用以下占位符,请求时 EMQX 将自动填充为客户端信息:
- %u:用户名
- %c:Client ID
- %a:客户端 IP 地址
- %r:客户端接入协议
- %P:明文密码
- %p:客户端端口
- %C:TLS 证书公用名(证书的域名或子域名),仅当TLS 连接时有效
- %d:TLS 证书 subject,仅当 TLS 连接时有效
附加:
花生壳配置信息
二、MQTT链接(初步操作,仅登录)
同时可以通过EMQ的可视化工具查看EMQ的配置及相关插件的使用与开关: