MQTT broker部署与测试
MQTT broker部署与测试
1. MQTT服务器(broker)部署
MQTT服务器有很多选择,除了有云服务方式,如阿里云的MQTT服务
,以及EMQX cloud
等等,还有私有部署方式
作为薅羊毛党,免费的是最香的,这里以EMQX的开源免费版本为例,来部署属于我们自己的私有MQTT服务器。
EMQX开源版下载地址:https://www.emqx.com/zh/try?product=broker
1.1 安装
下载 emqx-5.0.14-windows-amd64.tar.gz,解压。
命令行下进入解压路径,启动 EMQX:
./bin/emqx start
1.2 服务器管理
经过1.1步骤启动服务后,就可以在浏览器上访问管理界面
浏览器地址框输入: http://localhost:18083/(localhost 可替换为您的实际 IP 地址)以访问 EMQX Dashboard 管理控制台,进行设备连接与相关指标监控管理。
默认用户名及密码:
admin
public
首次登陆会提示修改用户密吗。
1.3 设置认证方式
设置好认证方式之后,MQTT客户端才有正确的连接权限,设置方式如下
访问控制
-> 认证
->创建
1.3.1 认证方式
认证方式有以下三种
密码认证
密码认证是最简单,也是使用最多的认证方式。此时,客户端需要提供能够表明身份的凭据,例如用户名、客户端 ID 以及对应的密码,或是 TLS 证书中的一些字段(例如证书公用名称)。这些身份凭据会提前存储到特定数据源(数据库)中,密码通常都会以加盐后散列的形式存储。
EMQX 支持通过密码进行身份验证。启用密码认证后,当客户端尝试连接时,需按要求提供身份凭证信息,EMQX 会在数据库中发起查询,并将返回得到的密码与客户端提供的信息进行匹配,匹配成功后,EMQX 将接受该客户端的连接请求。
除简单便捷的内置数据库外,EMQX 还支持通过与多类后端数据库的集成提供密码认证,包括 MySQL、PostgreSQL、MongoDB 和 Redis。
此外,EMQX 也支持通过 HTTP 方式对接用户自己开发的服务,借此实现更复杂的认证逻辑。
JWT 认证
Json Web Token(JWT) (opens new window)是一种基于 Token 的认证机制,它不需要服务器来保留客户端的认证信息或会话信息。客户端可以在密码或用户名中携带 Token,EMQX 通过预先配置的密钥或公钥对 JWT 签名进行验证。
此外,如果用户配置了 JWKS 端点,EMQX 也支持通过从 JWKS 端点查询到的公钥列表对 JWT 签名进行验证,从而能够批量为客户端签发认证信息。
MQTT 5.0 增强认证
MQTT 5.0 增强认证 (opens new window)是对密码认证的扩展,它更像是一种认证框架,允许使用各种更安全的认证机制,例如 SCRAM 认证、Kerberos 认证等。目前 EMQX 实现了 SCRAM 认证,并支持将认证数据存储在内置数据库中
这里选择最简单的用户密码认证方式,然后按照提示可选择内建数据库保存用户信息,创建完成后,需要点击用户管理,添加一个用户和密码,然后客户端就可以通过这个用户名和密码进行访问了。
2.MQTT客户端
客户端下载地址: https://mqttx.app/
客户端代码开源地址: https://github.com/emqx/MQTTX.git
测试需要两个客户端,我自己也写了一个简单的客户端用来测试
我自己写的客户端:https://gitee.com/HuangLiDi/mqtt-client.git
2.1 MQTTX客户端连接设置
新建连接,设置好如下图参数后,点右上角连接即可
服务器的IP和端口号查看方法:功能配置
->监听器
3.快速测试
两个客户端都连接上服务器后,客户端需要订阅相关的话题,发布话题对方即可接收到
客户端1 :
订阅话题:mytest/topic2 发布话题:mytest/topic1
客户端2 :
订阅话题:mytest/topic1 发布话题:mytest/topic2