1,Mosquitto 简介
Mosquitto是一款开源消息代理软件,实现了MQTT(Message Queuing Telemetry Transport)协议。Mosquitto提供了一个可靠的消息传输机制,提供轻量级的,支持可发布/可订阅的的消息推送模式,允许设备和应用程序通过发布和订阅消息进行通信,使设备对设备之间的短消息通信变得简单。它支持多种编程语言和平台,并且具有低延迟和高可扩展性的特点。
Mosquitto的一个典型应用案例就是Andy Stanford-ClarkMosquitto(MQTT协议创始人之一)在家中实现的远程监控和自动化。并在OggCamp的演讲上,对MQTT协议进行详细阐述。
Mosquitto的主要特性包括:
1)支持发布/订阅模式:设备可以发布消息到特定的主题,其它设备可以订阅这些主题来接收消息。
2)安全性:支持TLS/SSL加密传输,可以保证消息的安全性。
3)持久化:支持消息的持久化存储,确保即使在断开连接后也能接收到未读消息。
4)认证和授权:可以配置用户认证和访问控制规则,确保只有授权的设备可以发布和订阅消息。
5)集群支持:可以通过配置多个Mosquitto实例来实现高可用和负载均衡。
2,下载Mosquitto
3,安装Mosquitto
双击 mosquitto-2.0.18a-install-windows-x64.exe 进行安装
4,本地使用 Mosquitto
默认按照好的mosquitto只能在本地使用。
如果要在客户端计算机和远程mqtt服务器之间进行mqtt操作(订阅消息,上传消息),需要修改配置文件mosquitto.conf
在本地使用mosquitto,在安装目录中的README.md中有描述
修改配置文件
4.1,本地启动mqtt服务
打开新的cmd
4.2,从本地mqtt服务器订阅消息
打开新的cmd
4.3,本地发送消息到本地mqtt服务器
这块文档上写的不对,会报错。原因是消息必须用"符号包裹,而不是用’符号包裹。
打开新的cmd
这里要注意的是发送消息时的主题,必须和订阅的主题一样才行. e.g. 都是 ‘test/topic’
5,远程使用 Mosquitto
将服务装在远程计算机上,在本地发送mqtt消息
正常用的话,mqtt客户端和mqtt服务器都不在一台计算机上。
默认安装的 mosquitto,是不支持从本地mqtt客户端访问远程mqtt客户端的。
假设远程装了mosquitto的计算机IP为 10.4.22.37
现在远程计算机上安装mosquitto,这个步骤和本地相同。
从本地mqtt客户端访问远程mqtt服务器,需要认证,要配置用户名,口令。
用 mosquitto_passwd.exe 来配置mqtt登陆认证的存根文件,用户名是明文,口令是密文HASH, 防止有人登入mqtt服务器所在物理计算机,看到口令明文。
5.1,修改配置文件
修改配置文件如下:其中端口号1999 可更改,IP等信息亦可更改;
直接用命令行启动
因为安装后的目录需要管理员权限,先用管理员模式启动cmd(假设服务没启动)
5.2,添加用户
.\mosquitto_passwd.exe .\pwfile.example user1
pwfile.example 内容如下:
5.3,mqtt服务器订阅消息
打开新的cmd
5.4,发送消息到mqtt服务器
这块文档上写的不对,会报错。原因是消息必须用"符号包裹,而不是用’符号包裹。
打开新的cmd
6,问题记录
问题1:Error: 由于目标计算机积极拒绝,无法连接。
解决方法:.\mosquitto.exe 服务未启动
问题2:无法将“mosquitto_sub”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
解决方法:写全命令名
问题3:Error:通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
解决方法:
1)查找被占用的端口
// 查找使用的端口
netstat -ano
// 查找指定的端口
netstat -ano |findstr 1883
2)停用端口
// 停用端口
taskkill -PID 66836 -F
// 查看占用此端口的进程,在任务管理器中强制结束
tasklist|findstr 66836