tools - Mosquitto的安装与使用

本文介绍MQTT协议的基础知识,包括其提供的服务质量等级,以及如何在Ubuntu系统上安装和配置Eclipse Mosquitto消息代理。涵盖安装命令、配置文件解析、客户端使用方法及libmosquitto库函数说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

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

mqtt流程

ubuntu系统安装

  1. 添加到存储库列表
    sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
  1. 更新软件包
    sudo apt-get update
  1. 安装
   sudo apt-get install mosquitto
  1. 安装命令行客户端
    sudo apt-get install mosquitto-clients
  1. 配置
  主配置文件 /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
  }

  1. 启动
    mosquitto -c /etc/mosquitto/mosquitto.conf -d
  1. 测试
    消息订阅命令:
        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 用法详解
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 用法详解
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为12的消息,当客户端重新连接之后将接收到已排在队列中的消息
	-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	函数名	函数作用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值