简介
Eclipse Mosquitto是一个开源消息代理,轻量级的发布/订阅协议。
mqtt提供三种不同质量的消息服务:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复,Qos = 0
“至少一次”,确保消息到达,但消息可能会重复发生,Qos = 1
“只有一次”,确保消息到达一次,Qos = 2

ubuntu系统安装
- 添加到存储库列表
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
- 更新软件包
sudo apt-get update
- 安装
sudo apt-get install mosquitto
- 安装命令行客户端
sudo apt-get install mosquitto-clients
- 配置
主配置文件 /etc/mosquitto/mosquitto.conf,认证和权限配置可根据需要设置,可不设置
文件内容:
{
pid_file /var/run/mosquitto.pid
# 消息持久存储
persistence true
persistence_location /var/lib/mosquitto/
# 日志文件
log_dest file /var/log/mosquitto/mosquitto.log
# 其他配置
include_dir /etc/mosquitto/conf.d
# 允许匿名访问,禁止后下边文件添加信息
allow_anonymous true
# 认证配置
password_file /etc/mosquitto/pwfile
# 权限配置
acl_file /etc/mosquitto/aclfile
}
- 启动
mosquitto -c /etc/mosquitto/mosquitto.conf -d
- 测试
消息订阅命令:
mosquitto_sub -h localhost -t "mosqu_test/#" -i "client1"
消息发布命令:
mosquitto_pub -h localhost -t "mosqu_test/haha" -i "client3" -m "How are you?"
订阅系统主题,订阅客户端连接数:
mosquitto_sub -h localhost –t '$SYS/broker/clients/active' -u lilei -P 123456 -i "client2"
命令解析
mosquitto_pub [-d] [-h hostname] [-i client_id] [-I client id prefix] [-p port number]
[-q message QoS] [–quiet] [-r] { -f file | -l | -m message | -n | -s} [-u username [-P password]]
[ –will-topic topic [–will-payload payload] [–will-qos qos] [–will-retain] ] -t message-topic
选项:
-d, –debug 开启debug选项
-f, –file 把文件内容做为消息发送。支持txt文件
-h, –host 连接的域名,默认是localhost
-p, –port 连接的端口号,默认是1883.
-P, –pw 指定密码用于代理认证,使用此选项时必须有有效的用户名。
-q, –qos 消息的服务质量,值为0,1,2,默认是0.
--quiet 不会有任何错误被打印
-i, –id 客户端的ID号,默认进程ID,不能和id_prefix同时使用
-n, –null-message 发送一条空消息
-m, –message 从命令行发送一条消息,-m后面跟发送的消息内容。
-I, –id-prefix 指定客户端ID的前缀,与客户端的进程ID连接组成客户端的ID
-l, –stdin-line 从总段读取输入发送消息,一行为一条消息,空白行不会被发送。
-r, –retain 该消息被保留为最后一条收到的消息,下一个订阅消息者将能至少收到该条消息。
-s, –stdin-file 从标准输入接收传输的消息内容,所有输入做为一条消息发送。
-t, –topic 指定消息所发布到哪个主题。
-u, –username 指定用户名用于代理认证。
–will-payload 万一客户端意外和代理服务器断开,则该消息将被保留在服务端并发送出去,必须和–will-topic同时使用
–will-retain 万一客户端意外断开,已被发送的消息将被当做retained消息。必须和will-topic同时使用.
–will-qos 指定Will的服务质量,默认是0.必须和选项will-topic同时使用.
–will-topic 指定客户端意外断开时,Will消息发送到的topic
mosquitto_sub [-c] [-d] [-h hostname] [-i client_id] [-I client id prefix]
[-k keepalive time] [-p port number] [-q message QoS] [–quiet][-v]
[ -u username [-Ppassword] ] [ –will-topic topic [–will-payload payload]
[–will-qos qos] [–will-retain] ] -t message topic …
选项:
-c, –disable-clean-session 禁止’clean session’选项,如果客户端断开连接,这个订阅仍然保留来接收随后到的QoS为1和2的消息,当客户端重新连接之后将接收到已排在队列中的消息
-d, –debug 开启debug选项
-h, –host 说明所连接到的域名,默认是localhost
-i, –id 客户端的ID号
-I, –id-prefix 指定客户端ID的前缀
-k, –keepalive 给代理发送PING命令的间隔时间,默认是60s
-p, –port 说明客户端连接到的端口,默认是1883
-P, –pw 指定密码用于代理认证,使用此选项时必须有有效的用户名。
-q, –qos 指定消息的服务质量,为0,1,2,默认是0.
-t, –topic 指定订阅的消息主题,允许同时订阅到多个主题
-u, –username 指定用户名用于代理认证。
-v, –verbose 冗长地打印收到的消息,打印消息时前面会打印主题名—“主题 消息内容”,否则只打印消息内容
libmosquitto部分函数说明
mosquitto_lib_version 获取libmosquitto版本信息
mosquitto_lib_init 初始化,任何mosquitto库函数之前调用
mosquitto_lib_cleanup 释放lib资源
mosquitto_new 建立一个新的mosq客户端对象
mosquitto_destroy 销毁一个mosq客户端对象
mosquitto_reinitialise 重新定义一个mosq客户端对象
mosquitto_will_set 在connect之前调用,配置mosq对象topic
mosquitto_will_clear 删除mosq对象提前配置信息
mosquitto_username_pw_set 设置mosq对象的用户名和密码
mosquitto_connect 连接到mosq代理
mosquitto_connect_bind 连接到mosq代理,可以绑定特定接口
mosquitto_connect_async 连接到mosq代理,非阻塞(与mosquitto_loop_start一起使用)
mosquitto_connect_bind_async 以上两个功能相加
mosquitto_reconnect 与代理重连
mosquitto_reconnect_async 与代理重连(异步)
mosquitto_disconnect 与代理断开连接
mosquitto_publish 在一个特定topic上发布一条消息
mosquitto_subscribe 订阅一个话题
mosquitto_unsubscribe 取消订阅一个话题
mosquitto_message_copy 消息结构体复制
mosquitto_message_free 完全释放mosquitto_message结构体
mosquitto_message_free_contents 仅释放mosquitto_message结构体内容
mosquitto_loop 客户端启动mosq客户端服务
mosquitto_loop_forever 客户端一直启动mosq客户端服务
mosquitto_loop_start 另起一个线程启动mosq客户端服务
mosquitto_loop_stop 关闭一个mosq客户端服务
mosquitto_socket 将mosq对象转换成fd套接字
mosquitto_loop_read 启动读操作
mosquitto_loop_write 启动写操作
mosquitto_loop_misc ping等杂项操作
mosquitto_want_write 有数据准备好在套接字上写,则返回true
mosquitto_threaded_set 设置使用的线程
mosquitto_opts_set 为客户端设置选项
mosquitto_tls_set 配置客户端tsl/ssl证书
mosquitto_tls_opts_set 设置高级tsl/ssl选项
mosquitto_tls_psk_set 配置客户端psk
mosquitto_connect_callback_set 连接应答回调
mosquitto_disconnect_callback_set 函数名 函数作用