一、 安装mosquitto
1. 引入库:
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
2. 安装:
sudo apt-get update
sudo apt-get install mosquitto
3. 添加和修改配置文件
- 添加配置文件
1. 在/etc/mosquitto/conf.d目录下,添加配置文件myconfig.conf 配置文件
sudo vi /etc/mosquitto/conf.d/myconfig.conf
2. 粘入下面配置
#添加监听端口(很重要,否则只能本机访问)
listener 1883
#-------------------------------------------
# 关闭匿名访问,客户端必须使用用户名
allow_anonymous false
#指定 用户名-密码 文件
password_file /etc/mosquitto/pwfile.txt
#--------------------------------------------
- 添加账户及密码
sudo mosquitto_passwd -c /etc/mosquitto/pwfile.txt 用户名
回车后连续输入两次用户密码即可
- 启动mosquitto
sudo service mosquitto start
- 查看mosquitto运行状态
sudo service mosquitto status
- 最终配置文件结构
/etc/mosquitto/
├── mosquitto.conf
├── passwd # 密码文件
├── aclfile # 权限文件
└── conf.d/
└── auth.conf # 认证配置
二、运行测试
- MQTT.fx 新建客户端并连接服务器
1. 打开MQTT.fx后按下图操作
2. 右侧绿灯亮起则表示连接成功,下面即可进行相应的订阅或发布操作,此处电脑(一个客户端)订阅三个主题如下图所示:
3. 装置处(另一个客户端)在成功连接服务器之后,发布相应主题信息,在电脑客户端上即可成功看到订阅的主题的消息负载内容。
三、遇到的问题及解决措施
- 遇到的问题
电脑端MQTT.fx可正常连接服务器,电脑端可以ping通虚拟机,但装置处无法ping通虚拟机
- 解决措施
将装置和虚拟机设为同一个网段,此处设为192.168.1.*
- MQTT.fx 可能连接的是默认的 1883 端口(非TLS)
- 您的代码可能误连接到 8883 端口(TLS默认端口)
1. 设置虚拟机ip
点击VMware 菜单栏编辑—> 虚拟网络编辑器 —>找到右下角的“更改设置" 按图中所示修改
点击VMware 菜单栏编辑—> 虚拟机 —>设置 将网络连接方式改为桥接模式
完成以上两个步骤后,打开虚拟机,在网络配置中,手动配置以太网IP(此处使用的是192.168.1.123);
并且需要更改电脑直连装置的适配器选项,将ip改成装置同网段;
2. 修改装置ip
将装置ip设为与虚拟机同网段:192.168.1.138
3. 完成上面两个步骤后,装置即可ping通虚拟机,意味着装置和服务器即可正常通信。
常见场景对照表
现象 | 可能rc值 | 解决方案 |
---|---|---|
频繁意外断开 | MOSQ_ERR_CONN_LOST(7) | 检查网络稳定性/心跳设置 |
无法连接新Broker | MOSQ_ERR_CONN_REFUSED(5) | 验证协议版本/用户名密码 |
TLS连接失败 | MOSQ_ERR_TLS(8) | 检查CA证书链/加密套件 |
移动网络间歇断开 | MOSQ_ERR_ERRNO(256)+ETIMEDOUT | 增加keepalive时间 |
四、常用指令
# 使用命令行工具验证网络连通性
mosquitto_sub -h 192.168.1.XXX -t "test" -u "your_username" -P "your_password" -v
tail -f /var/log/mosquitto/mosquitto.log | grep "auth"
mosquitto -h //查看Broker版本