【经验分享】centOS7安装emqx 3.2版本,谈谈EMQ开源的Mqtt服务器在使用时候的方方面面心得!

在这里插入图片描述

一、前言

     写了这么多的嵌入式文章,这篇我给大家分享下 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
  • 个人邮箱:[email protected] 24小时在线,有回必回复!
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!
发布了152 篇原创文章 · 获赞 785 · 访问量 79万+

猜你喜欢

转载自blog.csdn.net/xh870189248/article/details/102511831