Eclipse Mosquitto™ 一款实现了 MQTT v3.1/v3.1.1 协议的轻量级开源消息代理软件。它支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器、手机、嵌入式计算机、微型控制器等移动设备。

Mosquitto也包含C/C++动态链接库libmosquitto 、mosquitto_pubmosquitto_sub 发布和订阅客户端。

安装

官方网站下载页下载 Mosquitto 源码并编译安装,也可以直接下载二进制安装包,这里我下载的是 mosquitto-1.4.12-install-win32.exe 。

安装成功后启动服务时会报错,根据提示下载OpenSSLpthreads依赖库,并把libeay32.dllssleay32.dllpthreadVC2.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 值再做一次运算,然后修改密码文件。

配置密码的过程如下:

  1. 首先使用令行工具mosquitto_passwd添加用户信息:

    mosquitto_passwd -c pwfile admin
    • -c表示创建一个新的用户并写入到一个新文件中,pwfile为文件名,admin为用户名。
  2. 访问控制权限

    • 可以通过配置/修改aclfile添加Topic和用户的关系。
  3. 修改配置文件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.txtreadme.md获取关于Mosquitto 更多信息。

除了Mosquitto ,还有有很多出色的 MQTT Borker ,这里是一个MQTT官方人员整理的 mqtt brokers 列表。

MQTT客户端开源库列表可以在 mqtt libraries 页面查看,本人目前使用的是Eclipse Paho C,它同时支持多种语言,包括 C 、C++、Python、Java、JavaScript 等。

标签: MQTT, broker, Mosquitto

添加新评论