Mosquitto MQTT Broker
Eclipse Mosquitto™ 一款实现了 MQTT v3.1/v3.1.1 协议的轻量级开源消息代理软件。它支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器、手机、嵌入式计算机、微型控制器等移动设备。
Mosquitto
也包含C/C++动态链接库libmosquitto
、mosquitto_pub
和mosquitto_sub
发布和订阅客户端。
安装
在官方网站下载页下载 Mosquitto
源码并编译安装,也可以直接下载二进制安装包,这里我下载的是 mosquitto-1.4.12-install-win32.exe 。
安装成功后启动服务时会报错,根据提示下载OpenSSL
和pthreads
依赖库,并把libeay32.dll
、ssleay32.dll
和 pthreadVC2.dll
复制到Mosquitto
安装目录,再重新安装一遍Mosquitto
即可。
安装完成后,程序文件目录大致如下:
- mosquitto – 代理器主程序
- mosquitto.conf – 配置文件
- mosquitto_passwd – 用户密码管理工具
- mosquitto_tls – very rough cheat sheet for helping with SSL/TLS
- mosquitto_pub – 用于发布消息的命令行客户端
- mosquitto_sub – 用于订阅消息的命令行客户端
- mqtt – MQTT的后台进程
- libmosquitto – 客户端编译的库文件
简单使用
创建Broker、订阅、发布消息可以通过命令行来进行
开启Broker
# 启动mosquitto服务 mosquitto # 或在启动时指定配置文件路径 mosquitto -c mosquitto.conf
mosquitto
语法是:mosquitto [-c config file] [ -d | --daemon ] [-p port number] [-v]
- -c 是指定配置文件的路径,默认不需要配置文件。
- -d 表示作为守护进程运行在后台。
- -p 用来指定监听的端口,默认是 1883 ,使用 TCP 连接,如果要使用 UDP 连接,需要设为 1884。
- -v 表示生成详细的运行日志,等价于配置文件中将 log_type 设为 all 。
使用
mosquitto_sub
订阅某个主题(topic):mosquitto_sub -t 'test/topic' -v
使用
mosquitto_pub
发布消息mosquitto_pub -t 'test/topic' -m 'hello world'
配置用户
Mosquitto
搭建成功后,大部分都是采用默认的允许匿名用户登录
模式,正式上线的系统需要进行用户认证。
mosquitto_passwd
的语法是:
mosquitto_passwd [ -c | -D ] passwordfile username
mosquitto_passwd -b passwordfile username password
mosquitto_passwd -U passwordfile
- -c 表示新建一个密码文件,如果文件已经存在,会被覆盖,用户名中不能包含冒号,因为密码文件中用户名和密码是用冒号隔开的。执行之后会要求设置密码,输入内容不可见,密码以加密 hash 值的方式存储在密码文件中。
- -D 表示删除用户名。
- -b 表示在命令行中,以明文方式设置密码。
- -U 用来将密码文件中的明文密码改成加密格式。如果文件中的密码已经是 hash 值,千万不要用这个选项,否则它会对 hash 值再做一次运算,然后修改密码文件。
配置密码的过程如下:
首先使用令行工具
mosquitto_passwd
添加用户信息:mosquitto_passwd -c pwfile admin
-c
表示创建一个新的用户并写入到一个新文件中,pwfile
为文件名,admin
为用户名。
访问控制权限
- 可以通过配置/修改
aclfile
添加Topic和用户的关系。
- 可以通过配置/修改
修改配置文件
mosquitto.conf
# 不允许匿名 allow_anonymous false # 一定要写绝对路径,即使路径中含有空格,也不需要使用引号和双引号,否则会启动失败 password_file D:/Program Files (x86)/mosquitto/pwfile # acl_file访问控制列表 acl_file D:/Program Files (x86)/mosquitto/aclfile
配置成功后,重启Mosquitto
服务测试,如果重启失败则可能是配置文件中包含错误。
API文档
关于客户端的编程可以参考 mosquitto_sub 和 mosquitto_pub 的源码。可以在 http://mosquitto.org/man/ 页面查看broker、客户端和客户端库API,也可以查看MQTT的一些特性。
详细的客户端库API可以在 http://mosquitto.org/api/ 页面查看。
总结
你也可以阅读安装目录下的readme-windows.txt
和 readme.md
获取关于Mosquitto
更多信息。
除了Mosquitto
,还有有很多出色的 MQTT Borker ,这里是一个MQTT官方人员整理的 mqtt brokers 列表。
MQTT客户端开源库列表可以在 mqtt libraries 页面查看,本人目前使用的是Eclipse Paho C,它同时支持多种语言,包括 C 、C++、Python、Java、JavaScript 等。