软件研究之EMQX
1.前言
EMQX软件,是mqtt的服务端程序。
2.安装
不同的系统的安装方式不同,这里我简单的记录下相关的东西,具体的还是要去看官方文档。安装启动后,emqx 所占用的端口号如下:
1883 | MQTT 协议端口 |
8883 | MQTT/SSL 端口 |
8083 | MQTT/WebSocket 端口 |
18083 | HTTP API 服务的默认监听端口,Dashboard 管理控制台端口 |
修改默认的端口,就需要编辑 emqx/etc/emqx.conf 里面的配置。emqx restart 好像在5.x版本之后不能用了,只能先stop再start。
1 | listeners.tcp.default { |
还可以直接在 dashboard 页面进行编辑。打开菜单管理->监听器,针对每一个监听器,都可以进行端口修改。
1.安装 这是官方安装文档,里面有特别多的平台安装步骤。
2.EMQX 入门教程 环境篇②——修改TCP监听的端口
3.EMQX 入门教程③——默认端口、端口策略和端口修改
4.MQTT/TCP 监听器 - 1883 listeners.tcp.$name.bind,其中的 $name 是比如 default 这样的值。
5.EMQX 启动时提示端口被占用
2.1.CentOS安装
1 | ## 安装 |
2.2.MacOS
这个的安装,我直接使用官方打包好的二进制文件下载下来,解压之后进行运行。进入到解压明目,执行相应命令启动。
1 | # 启动 |
EMQX Dashboard 是一个 Web 应用程序,默认监听 18083 端口。下载安装 EMQX 并成功启动之后,可以通过浏览器打开 http://localhost:18083/(如部署在非本机的,可将 localhost 替换为实际 IP 地址)来访问和使用 EMQX Dashboard。
2.3.Windows
进入 emqx 的目录,然后执行启动和重启命令。
1 | # 启动 |
【1】.Windows
2.4.Linux
(1) 下载安装包,使用源码安装配置
1 | # 下载 |
(2) 使用yum安装,我自己没有尝试过,因为我用的是阿里云系统,好像脚本不支持
1 | # 1.下载 |
2.配置
配置文件在 ./etc/eqmx.conf 文件中。
2.1.配置用户名密码
对于首次安装和部署好 EMQX 的用户来说,浏览器打开 Dashboard 后可以使用默认用户名 admin 和默认密码 public 来进行登录使用。首次登录后,系统会自动检测到您正在使用默认用户名和密码登录,并会强制要求修改默认密码,这有利于访问 Dashboard 的安全性提升,注意修改的密码不能与原密码相同,且不建议再次使用 public 做为登录密码。
2.3.配置https
主要有三种方式可以配置
(1)使用 nginx 进行转发
1 | server { |
(2)使用 Dashboard 配置
打开 Dashboard,点击管理 -> 监听器进入监听器管理页面。选择名称为 default,类型为 ssl 的监听器,点击名称进行编辑。将从 阿里云获取到的 证书填入即可。TLS Cert 就是pem或者是crt文件,TLS Key 就是 key 文件内容。
这里需要注意的就是除了要有 TLS 证书,还要有根证书,因为我用的是 阿里云 的免费证书,签发机构是 DigCert 免费版,所以需要 Download DigiCert root and intermediate certificates, 找到证书进行下载,然后上传服务器,配置 cacertfile。其实不配置根证书,也能正常的使用,根证书不是必须的。
(3)使用 配置文件配置
将 SSL/TLS 证书文件复制到 EMQX etc/cert 目录。我直接用的是 nginx 的 pem 和 key ,然后将 pem 改成了 .crt 后缀。
打开配置文件 emqx.conf,根据您的安装方式,可能位于 ./etc 或 /etc/emqx/etc 目录。,mqx.conf 中默认没有监听器配置,添加以下配置内容
1 | listeners.ssl.default { |
(3)测试
测试可以使用 MQTTX 客户端进行测试,新建一个wss连接,然后选择连接就可以了。这里有一个 SSL Secure 配置,不能打开,打开就报错了。
(4)问题
我在MQTTX上测试了可以连接,但是在web端测试 wss,结果连接不上。后来我使用了 域名 代替了 IP 地址,就可以了。
【1】.emqx配置ssl/wss/mqtts并且测试通过 这里主要是使用的 nginx 进行的配置
【2】.EMQX SSL/TLS 使用配置指南 官方配置 ssl/tls 连接,这个配置还是比较老的,有点不适用了。
【3】.开启 SSL/TLS 连接 1.使用 Dashboard 配置;2.使用 配置文件配置。3.单向认证客户端测试。
【4】.Can’t configure EMQX dashboard in https 这是一个问题提问,但是没有人回复
【5】.如何获取根证书和中间证书
【6】.websocket wss连接出错 我用域名代替ip可以连接上了
【7】.emqx配置ssl/tsl实现双向认证 生成根证书私钥,配置双向认证。
【8】.wss连接不上会有哪些原因 connection refuse(连接拒绝), 一般是以下原因: 1、客户端连接的端口错了。2、客户端连接的域名或者ip错了。3、如果客户端使用了域名连接,域名可能指向了错误的服务器ip.4、服务器使用了cdn等加速代理,导致连接的实际ip与预期ip不一致.5、服务端没有启动或者端口没有被监听。6、使用了网络代理软件。7、服务端监听ip与访问地址不在一个地址段。例如服务端监听127.0.0.1,则客户端只能通过127.0.0.1连接,不能通过局域网ip或者外网ip连接。建议监听地址设置为0.0.0.0,这样本机、内网、外网都可以连接。
3.管理控制台
启动服务之后,可以在浏览器中输入:http://127.0.0.1:18083/
地址,输入默认的用户名:admin,密码:public,进入之后,需要修改默认密码。
1.Dashboard
4.测试客户端
MQTTX是一个跨平台的mqtt客户端,可以很方便的在macOS / Linux / Windows 中进行使用。可以到官方下载 进行下载
1.MQTTX 桌面客户端使用指南
4.1.问题
(1) Cannot publish messages to topics containing wildcard characters #, +
当我使用MQTTX的发送消息的时候,发送到了主题:sys/product/+/status,结果报错了。我网上搜到的结果就是:A client can publish a payload to a single topic only, you can’t use wildcards for topics while publishing.You can use wildcards(#+) only for subscribing to the topics.
【解决方案】
意思是发布的时候不能使用 + 号通配符,但是订阅的时候,可以使用通配符,这样也就可以解释为什么无法发送消息了。
1.JAVA Paho mqtt - publish to wildcard 这里说了原因