查看原文
其他

一篇文章带你入门 MQTT 消息队列遥测传输

JackTian 杰哥的IT之旅 2022-06-07
点击上方“杰哥的IT之旅”,选择“设为星标”
干货、福利第一时间送达!
作者 | 阿东 
来源 | 杰哥的IT之旅 (ID:Jake_Internet)
转载请联系授权(微信ID:Hc220066)

MQTT入门

概念

mqtt意为消息队列遥测传输,是IBM开发的一个即时通讯协议。由于其维护一个长连接以轻量级低消耗著称,所以常用于移动端消息推送服务开发。
协议格式

mqtt协议控制报文的格式包含三部分:

以固定报头、可变报头和有效载荷,其中固定报文头是所有控制报文都有的,可变报头和有效载荷都是部分控制报文。  

mqtt是二进制的协议,控制字段是精确到Bit级别的,单纯这一点就足以为其在物联网领域占据一席之地。mqtt是不支持分包等机制,并不适宜一些数据包特别大的应用场景。

mqtt特性

  • 使用发布/订阅消息模式,提供一对多消息发布;

  • 对负载内容屏蔽的消息传输;

  • 使用TCP/IP进行网络连接;

  • 具有三种消息发布服务质量选项:

  • 1."至多一次",通常app的推送使用的是这种模式,也就是说,如果移动设备在消息推送的时候没有联网,那么再次联网就不会收到通知了;

  • 2."至少一次",可以确保消息收到,但消息可能会重复;

  • 3."只有一次",确保消息到达一次,比如计费系统,如果出现消息重复或者丢失会导致系统结果不正确的问题。

  • 小型传输,开销很小,协议交换最小化,以降低网络流量;

  • 通知有关各方客户端异常中断的机制。

mqtt协议实现方式

发布者----发布消息---->代理-------推送消息----->订阅者
发布者----发布消息---->代理<-----订阅消息-------订阅者

在mqtt协议中有三种身份:

  • 发布者(publish):发布者是客户端,可以进行发布消息

  • 代理(broker):代理指的是服务器,比较有名的是emqtt,当前可以其他成熟的框架去搭建mqtt服务

  • 订阅者(subscribe):指的客户端,不过发布者同时也可以是订阅者。

mqtt服务端和客户端实现的功能

mqtt服务端
  • 接受来自客户端的网络连接;

  • 接受客户发布的应用信息;

  • 处理来自客户端主题订阅和退订请求;

  • 向订阅的客户端转发应用程序消息

mqtt客户端
  • 给其他客户端发布订阅的消息;

  • 订阅其他客户端发布的消息;

  • 退订和订阅主题;

  • 断开服务器连接

mqtt协议中的方法

  • connect:等待服务器建立连接;

  • disconnect:等待客户端完成所做的工作,并与服务器断开TCP/IP会话;

  • subscribe:主题订阅;

  • unsubscribe:主题取消订阅;

  • publish:发送消息

mqtt的安装

# sudo yum install epel-release
# sudo yum install mosquitto mosquitto-clients
# sudo systemctl start mosquitto
mqtt默认是以1883端口运行的

mqtt简单使用

mosquitto的配置文件为/etc/mosquitto/mosquitto.conf/
1.添加密码配置并且不允许匿名用户登录
# sudo vim /etc/mosquitto/mosquitto.conf
allow_anonymous false  #不允许匿名登录
password_file /etc/mosquitto/pwfile  #配置用户密码文件
acl_file /etc/mosquitto/aclfile  # 配置topic和用户

2.添加用户信息
# mosquitto_passwd -c /etc/mosquitto/pwfile ceshi
# mosquitto_passwd /etc/mosquitto/pwfile ceshi2
分别添加用户ceshi和ceshi2

3.添加topic和用户的关系(权限配置)
# sudo vim /etc/mosquitto/aclfile
# ceshi只能发布V222为前缀的主题,订阅V333开头的主题
user ceshi
topic write V222/#
topic read V333/#
# ceshi2只能订阅以V222为前缀的主题
user ceshi2
topic read V222/#

- write:发布订阅
- read:接受订阅

4.启动
-c :指定配置文件启动
-d: 后台运行
mosquitto -c /etc/mosquitto/mosquitto.conf -d 

5.测试
发布订阅:mosquitto_pub
接受订阅:mosquitto_sub
参数:
-h :服务器主机
-t :指定主题
-u :用户名
-P : 密码
-i :客户端id
-m :发布的消息内容

# mosquitto_sub -h localhost -t "V222" -u ceshi2 -P 123456

# mosquitto_pub -h localhost -t "V222" -m "Hello world" -u ceshi -P 123455
配置文件解析
# 系统状态的刷新时间
# sys_interval 10

#
 系统资源的回收时间,0表示尽快处理
# store_clean_interval 10

#
 服务进程的pid
# pid_file /var/run/mosquitto.pid

#
 服务进程的系统用户
# user mosquitto

#
  客户端心跳消息的最大并发数
# max_inflight_messages 10

#
 客户端心跳消息缓存队列
# max_queued_messages 100

#
 用于设置客户端长连接的过期时间,默认永不过期
# persistent_client_expiration

#
 服务绑定的IP地址
# bind_address

#
 服务绑定的端口
# port 1883

#
 消息自动保存的间隔时间
# autosave_interval 1800

#
 消息自动保存功能的开关
# autosave_on_changes false

#
 持久化功能的开关
# persistence true

#
 持久化DB文件
# persistence_file mosquitto.db

#
 持久化DB文件目录
# persistence_location /var/lib/mosquitto/

#
 4种日志模式:stdout、stderr、syslog、topic
# none:则表示不记录日志
log_dest none
# 选择日志的级别
# log_type error
# log_type warning
# log_type notice
# log_type information

#
 是否记录客户端连接信息
# connection_messages true

#
 是否记录日志时间
# log_timestamp true

#
 允许匿名用户
# allow_anonymous false

#
 用户/密码文件,默认格式为:user/passwd
# password_file /etc/mosquitto/passwd


后台回复「加群」即可加入读者交流群!
本公众号全部文章已整理成一个目录,请在本公众号后台回复「m」获取!
点击文章底部左侧「阅读原文」可跳转到历史文章哦~



1、Linux 之 Yum 仓库的配置及使用
2、Linux 环境下安装 Python3 的操作方法
3、Linux 环境下安装 GitLab 与配置
4、详解 Linux 环境下防毒软件 ClamAV
5、Linux 环境下安装 Nexus 私服存储库
6、神奇,原来 Linux 终端下居然还有进程记帐功能...
7、如何在线上环境挂载 LVM 磁盘?
8、MySQL | MySQL 数据库系统(二)- SQL语句的基本操作
9、MySQL | MySQL 数据库系统(三)- 数据库的用户授权
10、MySQL | MySQL 数据库系统(四)- 数据库的备份与恢复

点个「在看」,分享给更多的人。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存