关于MQTT
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。该协议轻量、简单、开放和易于实现,这些特点使它适用范围非常广泛。 常用于机器对机器和物联网的数据传输。
搭建MQTT服务器
这边使用的是开源的EMQX 在Linux上使用docker搭建EMQX容器(这边笔者使用的是Ubuntu-Server-24.04.1)
安装前的准备
检查Docker是否安装
显示docker未安装
检查系统是否兼容
Docker需要以下 Ubuntu 版本之一的 64 位版本:
Ubuntu Oracular 24.10
Ubuntu Noble 24.04 (LTS)
Ubuntu Jammy 22.04 (LTS)
Ubuntu Focal 20.04 (LTS)
兼容x86_64(或 amd64)、armhf、arm64、s390x 和 ppc64le(ppc64el)架构。
开始安装Docker
设置 Docker 的apt存储库
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
在Do you want to continue? [Y/n] 输入Y
验证Docker安装
输入
docker --version
显示Docker版本即为安装完毕。
配置Docker镜像源
使用docker拉取镜像时候,因为docker默认的镜像源是Dockerhub,而这个网站在域外。所以有时候会卡在中途死活下载不完,我们也可以对docker换国内镜像源(国内镜像源都死光了)。
sudo vim /etc/docker/daemon.json
将内容修改为
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
开始安装EMQX
拉取EMQX
运行以下命令拉取EMQX的Docker镜像
docker pull emqx/emqx:5.8.5
//指定版本 5.8.5
docker pull emqx/emqx:latest
//版本最新
配置持久化目录
创建/opt/emqx/data和/opt/emqx/log两个文件夹并修改权限和所有者
mkdir -p /opt/emqx/data
mkdir -p /opt/emqx/log
sudo chmod -R 775 /opt/emqx/data /opt/emqx/log
sudo chown -R 1000:1000 /opt/emqx/data /opt/emqx/log
运行EMQX
docker run --name emqx \
-p 1883:1883 -p 8083:8083 \
-p 8084:8084 -p 8883:8883 \
-p 18083:18083 \
-v /opt/emqx/data:/opt/emqx/data \
-v /opt/emqx/log:/opt/emqx/log \
emqx/emqx:5.8.5
配置EMQX平台设置
EMQX默认会使用以下协议端口:
1883: MQTT 协议端口
8883: MQTT/SSL 端口
8083: MQTT/WebSocket 端口
8084: MQTT/wss 端口
访问http://你的服务器ip:18083
默认登录账户admin,密码public。
第一次登陆会要求修改密码,可以修改或者不修改。
访问http://你的服务器ip:18083/#/authentication
右上角创建客户端验证,选择Password-Based,再选择内置数据库(如果您有其他数据库可以用其他数据库实现集群客户端验证),配置参数默认,确定后在用户管理中添加需要使用EMQX做MQTT数据转发的客户端。
测试MQTT发布/订阅
笔者使用的是MQTTBox进行测试
点击Create MQTT Client
主要需要配置的是以下几项
Protocol mqtt的传输协议
Host 服务器的地址
Username 客户端验证的用户名
Password 客户端验证的密码
点击Save后左上角显示为绿色connected即为连接MQTT平台成功
界面左侧为MQTT的发布主题功能,右侧为订阅主题功能
在Topic to publish和Topic to subscribe输入相同的主题,点击右侧的Subscribe即可订阅该主题
在Payload内输入你自定义好的消息点击Publish发布
如右侧能正常收到主题消息代表MQTT服务器搭建完成,未来可以直接接入物联网设备