【经验分享】centOS7安装emqx 3.2版本,谈谈EMQ开源的Mqtt服务器在使用时候的方方面面心得!
Posted on 2019-12-11 16:40 CoreHouse 阅读(753) 评论(0) 收藏 举报文章目录
一、前言
写了这么多的嵌入式文章,这篇我给大家分享下 EMQ 服务器商用时候的心得;毕竟物联网通讯,第一时间就是想到服务器搭建,而第一想到的是开源的、免费的MQTT服务器搭建,2017年我出了一篇EMQ2.3版本的教程,时过境迁,本篇介绍 EMQ3.0 版本的搭建和使用!废话不多说,客官请看!
二、安装
使用 zip 包安装 EMQ X
- 1:选择系统和版本
https://www.emqx.io/downloads#broker
- 2:我这里选择3.23版本 centos7,得到下载链接:
https://packages.emqx.io/emqx-ce/v3.2.3/emqx-centos7-v3.2.3.zip
- 3:然后下载压缩包:
wget https://packages.emqx.io/emqx-ce/v3.2.3/emqx-centos7-v3.2.3.zip

- 4:安装或者更新 解压包zip工具: yum install unzip -y

- 5.解压:unzip emqx-centos7-v3.2.3.zip
- 6.运行:./emqx/bin/emqx start

- 7.查看运行状态:./emqx/bin/emqx_ctl status
 ![在这里插入图片描述]() 
三、禁止客户端任意连接
软件安装之后,我们的服务器还要开放以下端口:
| 端口号 | 用途 | 
|---|---|
| 18083 | mqtt服务器面板 | 
| 1883 | tcp mqtt连接 | 
| 8083 | websocket连接 | 
| 8084 | websocket ssl连接 | 
| 8080 | rest api http使用 | 
EMQ软件不配置任何设置,都是可以匿名登录的,也即是可有可无用户名和密码鉴权登录连接,这点是非常危险的!下面教大家如何新建用户名和密码鉴权!
3.1 关闭匿名登录
    首先,关闭匿名登录,编辑配置文件 emqx.conf ,修改为 allow_anonymous改为 false,即修改后是 allow_anonymous = false;
vim emqx/etc/emqx.conf
    操作演示:
 
     这时候,我们再连接,怎么连接都是失败的;

3.2 开启用户名字密码认证插件
    此插件emqx_auth_username.conf是中间件,做客户端的认证处理!
./emqx/bin/emqx_ctl plugins load emqx_auth_username
启动之后,下面就可以添加用户了,比如我要添加 这样的客户端连接用户名字和密码数据:
| username | password | 
|---|---|
| emq_u | emq_x | 
则,这样敲进去:
./emqx/bin/emqx_ctl users add emq_u emq_x
我们再看看是否添加:
./emqx/bin/emqx_ctl users list
 :
:
四、通过Http接收和发送MQTT消息
这个特色,我觉得是最好用的,我对比过 阿里云、百度云和腾讯云提供的MQTT服务器,都是通过MNS消息队列这类的付费插件操作设备的上报消息,本来买他的MQTT付费了,再买一个消息队列这样的收费产品,真是“坑爹”!
4.1 配置私有服务器接收设备上报的消息
- WebHook 插件
emqx_web_hook 插件可以将所有 EMQ X 的事件及消息都发送到指定的 HTTP 服务器。
     如下所示,打开插件,配置你的服务器uri接收地址!之后记得启动!
 
下面列举发送的常见格式
更多格式请访问获取:https://github.com/emqx/emqx-web-hook
- client.connected :客户端连接成功MQTT服务器
{
    "action":"client_connected",
    "client_id":"C_1492410235117",
    "username":"C_1492410235117",
    "keepalive": 60,
    "ipaddress": "127.0.0.1",
    "proto_ver": 4,
    "connected_at": 1556176748,
    "conn_ack":0
}
- client.disconnected :客户端断开MQTT服务器的连接
{
    "action":"client_disconnected",
    "client_id":"C_1492410235117",
    "username":"C_1492410235117",
    "reason":"normal"
}
- client.subscribe :客户端订阅主题
{
    "action":"client_subscribe",
    "client_id":"C_1492410235117",
    "username":"C_1492410235117",
    "topic":"world",
    "opts":{
        "qos":0
    }
}
4.2 通过Http请求发送一则消息
这个也是蛮好的设计,平时我们想发送一则消息给设备,但是不想又不想连接MQTT直接发送,这个可以省去连接的步骤!
EMQ 的管理监控API (REST API),
用户可以通过 REST API 查询 MQTT 客户端连接(Connections)、会话(Sessions)、订阅(Subscriptions)和路由(Routes)信息,还可以检索和监控服务器的性能指标和统计数据。
首先,先在面板创建一个授权用户,如下操作:

之后,查看该用户的详细信息!得到 AppId 和 App 密钥!

这里,我使用postman测试,如下配置:
- 其中认证选择 basic auth ,名字和密码对应在面板创建应用的appid和app密钥!
- 访问的url为:http://localhost:8080/api/v3/mqtt/publish
- body格式为下面,顾名思义我们看到其中字段的意思了:
{
"topic":"Hello",
"qos":1,
"retain":false,
"client_id":"xuhongPhpClient",
"username":"xuhongPhpClient",
"payload":"hellp"
}
- 回复 code = 0 ,则表示授权并成功发送!

另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- 玩转esp8266带你飞、加群付费QQ群,不喜的朋友勿喷勿加:434878850
- 个人邮箱:xuhongv@yeah.net 24小时在线,有回必回复!
- esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
- esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
- 关注下面微信公众号二维码,干货多多,第一时间推送!
 
 
 
                    
                     
                    
                 
                    
                 
 
        
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号