基于EMQX的mqtt服务器部署

EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。

作为全球最具扩展性的 MQTT 消息服务器,EMQX 提供了高效可靠海量物联网设备连接,能够高性能实时移动与处理消息和事件流数据,帮助快速构建关键业务的物联网平台与应用。

mqtt部署

说明:

  1. 本文档由杜若甫撰写,由杜若甫负责解释及执行。
  2. 本文用以记录基于EMQX的mqtt服务器部署过程,一方面替自己记忆细节,一方面方便向别人传播。

修订历史:

文档名称 版本 作者 时间 备注
基于EMQX的mqtt服务器部署 DuRuofu 2023-04-28 首次建立
基于EMQX的mqtt服务器部署以及ws+wss支持 DuRuofu 2023-05-05 完成编写

基于EMQX的mqtt服务器部署

一、EMQX介绍

EMQ X 基于 Erlang/OTP 平台开发的 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器。

MQTT属于是物联网的通信协议,在MQTT协议中有两大角色:客户端(发布者/订阅者),服务端(Mqtt broker);针对客户端和服务端需要有遵循该协议的的具体实现,EMQ/EMQ X就是MQTT Broker的一种实现。

EMQ X 是开源百万级分布式 MQTT 消息服务器(MQTT Messaging Broker),用于支持各种接入标准 MQTT 协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联 网设备的数据采集,和对设备的操作和控制。

EMQX官网:www.emqx.io/cn/
EMQX文档: 文档快速入门

二、部署过程(以windows为例)

1.下载服务器代码:


移动到服务器:

2. 解压,运行启动命令:

使用命令行进入服务器源代码bin目录:

输入服务器启动命令:

1
emqx start

如下便启动成功:

3.验证启动是否成功

可以尝试访问服务器18083端口,服务器的后端管理网页运行于这个端口

无法访问可能是服务器防火墙规则为放行对应端口,需要自行修改(云服务器如下图)。

端口放行后可正常打开,默认用户名为:admin 密码:public


第一次登录会要求更改管理员密码,建议修改

如上mqtt服务就部署成功了。
可以连接进行测试:
使用客户端测试工具进行连接测试:


后台也可以看到连接对象:

此上,mqtt的基本部署完成,如果没有加密传输的需求,到这就结束了。(ps:如果连接失败,建议查看服务器是否开启对应端口,比如mqtt连接使用的1883端口)

4. 服务证书配置

在一些应用开发里,必须使用WebSocket/TLS 协议进行通信,不能使用单纯的TCP连接。比如微信小程序:

微信小程序仅支持通过 WebSocket 进行即时通信,EMQ X 的 MQTT Over WebSocket 能够完全兼容使用在微信小程序上。但由于微信小程序的规范限制,EMQX 使用微信小程序接入时需要注意以下几点:

  • 使用已经通过域名备案域名接入
  • 域名需要微信公众平台登录后在主页面的服务器域名下添加配置服务器域名地址
  • 仅支持 WebSocket/TLS 协议,需要为域名分配受信任 CA 颁发的证书
  • 由于微信小程序 BUG,安卓真机必须使用 TLS/443 端口,否则会连接失败(即连接地址不能带端口)
    对应第三点,要使微信小程序通过 WSS 连接到 EMQX,我们需要给服务配置证书。
1.下载证书:

找到服务器域名证书选项()

下载nginx格式证书:

2.配置证书:

将证书文件夹放入服务器根目录:

将证书文件移入默认的证书文件夹“

移动到:

打开配置文件:etc/emqx.conf 到配置文件中修改
listener.wss.external.keyfile = /etc/emqx/certs/你的域名.key
listener.wss.external.certfile = /etc/emqx/certs/你的域名_bundle.pem
未配置前

修改框选位置为自己的证书文件:

修改完保存即可(重启mqtt服务器,记得开启对应端口防火墙)。

需要注意的是EMQX默认使用的是8084端口,需要在代码中指定端口,且小程序后台开放wss://你的域名:8084才行  
或者修改emqx的8084端口为443也可以
3.测试

配置好证书后可以用dash检测下websocket加上tls能否连接,也可以用检测工具https://myssl.com/ssl.html
使用检测工具可以检测到证书信息可用即说明证书部署成功:

也可以使用测试工具测试wws连接:


发现可以连接成功:

至此整个mqtt部署完成。

5.其他

由于微信小程序 BUG,安卓真机必须使用 TLS/443 端口,否则会连接失败(即连接地址不能带端口)

对这个问题 我们需要使用nginx代理,监听端口443并代理转发给EMQX的8084端口。由于本文主要记录mqtt服务器的部署,在此不再赘述。

参考链接

  1. 微信小程序整合MQTT - keitsi - 博客园
    cnblogs.com

  2. 【经验分享】微信小程序连接 EMQX 的证书配置问题 - EMQX - EMQ 问答社区
    askemq.com

  3. 微信小程序连接MQTT服务器全过程_白白的昕的博客-CSDN博客_微�
    csdn.net

  4. 物联网系列 - EMQ X简介与安装

    https://juejin.cn/post/7026170795386732581

  5. 小程序使用mqtt连接WebSocket调试工具可以正常连接,真机不行
    https://developers.weixin.qq.com/community/develop/doc/00082ca48ec8b00ecc3895ceb53c00?highLine=mqtt


基于EMQX的mqtt服务器部署
https://www.duruofu.xyz/posts/53146/
作者
DuRuofu
发布于
2023年6月6日
更新于
2025年1月10日
许可协议