自然资源部晒出我国矿产资源“家底” 矿业绿色发展取得
人民网北京12月3日电 (记者杨曦)矿产资源家底数据是基本国情国力的重要组成部分。近日,自然资源部发布的《中
( Message Queuing Telemetry Transport)消息队列传输探测,一种基于发布/订阅模式的轻量级消息传输协议
在1999年的时候,Andy Stanford-Clark和 Arlen Nipper需要一种通过卫星连接原油管道数据采集监控系统的协议,以最大限度地减少电池损耗和带宽。所以发明了MQTT协议。
【资料图】
适用于低带宽和不稳定网络环境的物联网应用场景,在这样的场景中,可以用极少的代码为联网设备提供实时可靠的消息服务。
MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。
易于实现
轻量高效,节省带宽,最小报文仅为 2 个字节。
使用TCP进行连接,实现稳定、可靠的网络连接
基于发布订阅模型,支持双工通信。
灵活性、扩展性很强。
C/S模式:客户端能够直接和服务器进行通信
pub/sub:将发送消息的发布者publisher
与接收消息的订阅者subscribers
进行分离,publisher 与 subscribers 并不会直接通信,他们甚至都不清楚对方是否存在,他们之间的交流由第三方组件 broker
代理。
发布-订阅模式的优点:
消除了传统c/s模式之间的直接通信,把通信这个操作交给了 broker 进行代理,并在空间、时间、同步三个维度上进行了解藕。
broker 能够对消息进行过滤,使每个订阅者只接收自己感兴趣的消息。
过滤选项:
(1)基于主题的过滤:MQTT 是基于 subject 的消息过滤的,每条消息都会有一个 topic ,接收客户端会向 borker 订阅感兴趣的 topic,订阅后,broker 就会确保客户端收到发布到 topic 中的消息。
(2)基于内容过滤:broker 会根据特定的内容过滤消息,接受客户端会经过过滤他们感兴趣的内容。
(3)基于类型过滤:使用面向对象的语言时,基于消息(事件)的类型过滤是一种比较常见的过滤方式。
publisher 和 subscriber 都属于 MQTT Client。之所以有发布者和订阅者这个概念,其实是一种相对的概念,就是指当前客户端是在发布消息还是在接收消息
MQTT 客户端是指运行 MQTT 库并通过网络连接到 MQTT broker 的任何设备,这些设备可以从微控制器到成熟的服务器。
连接是client和broker之间的连接。 client 就会向 broker 发起 CONNECT
消息,代理会使用 CONNACK
消息和状态码进行响应。
一旦 client 和 broker 的连接建立后,broker 就会使客户端的连接一直处于打开状态,直到 client 发出断开命令或者连接中断。
发布消息
负载(Payload)
,Payload 中包含要以字节形式发送的数据。(数据格式由数据的发布者确定)订阅消息
client 会向 broker 发送 SUBSCRIBE 消息来接收有关感兴趣的 topic,这个 SUBSCRIBE 消息非常简单,它包含了一个唯一的数据包标识和一个订阅列表。
确认消息
client 在向 broker 发送 SUBSCRIBE 消息后,为了确认每个订阅,broker 会向 client 发送 SUBACK 确认消息。
退订消息:
取消订阅也需要 broker 的确认,此时 broker 会向 client 发送一个 UNSUBACK
消息,这个 UNSUBACK 消息非常简单,只有一个 packetId 数据标识符。
在 MQTT 中,Topic 是指 broker 为每个连接的 client 过滤消息的 UTF-8
字符串。Topic 是一种分层的结构,可以由一个或者多个 Topic 组成。每个 Topic 由 /
进行分割。
与传统的消息队列相比,MQTT Topic 非常轻量级,client 在发布或订阅之前不需要先创建所需要的 Topic,broker 在接收每个 Topic 前不用进行初始化操作。
当客户端订阅 Topic 时,它可以订阅已发布消息的确切 Topic,也可以使用通配符来同时订阅多个 Topic。通配符有两种:单级和多级。
单级通配符
单级通配符可以替换 Topic 的一个级别,+
号代表 Topic 中的单级通配符。
多级通配符
多级通配符涵盖多个 Topic,#
代表 Topic 中的多级通配符。为了让 broker 能够确定和哪些 Topic 匹配,多级通配符必须作为 Topic 中的最后一个字符放置,并以 /
开头。
当 client 订阅带有多级通配符的 Topic 时,不论 Topic 有多长多深,它都会收到通配符之前 Topic 的所有消息。如果你只将 Topic 定义为 # 的话,那么你将会收到所有的消息
Mosquitto 是一种流行的MQTT代理和客户端库,它可以用于实现MQTT通信
mosquitto是一款实现了消息推送协议 MQTTv5.0, v3.1.1, v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
Mosquitto
安装之后默认提供了mosquitto_pub
和mosquitto_sub
两个命令行 MQTT 客户端工具。
# 下载地址https://github.com/eclipse/mosquitto# 官网https://mosquitto.org/
mosquitto_pub:
用于向mqtt broker
发送消息
相关参数:
-h # 指定要连接mqtt broker的地址 默认为localhost-p # 指定mqtt broker的端口号-u # 指定在与代理进行身份验证时要使用的用户名-P # 指定在与代理进行身份验证时要使用的密码-m # 消息内容-t # 指定发送消息的topic名称-i # 用于为连接到MQTT代理的客户端分配一个唯一的客户端ID
例如:发布消息
# 将连接到本地主机上运行的MQTT代理,并发布消息“Hello, MQTT”到主题“topic/test”上。mosquitto_pub -h localhost -t "topic/test" -m "Hello, MQTT"# 例如 向地址为10.0.0.33发送topic为/xyz,消息为"How are you to to to?"的消息mosquitto_pub -h 10.0.0.33 -t "/xyz" -i "client3" -m "How are you to to to?" -u bruce -P lan1532
mosquitto_sub:
用于向mqtt broker
订阅消息。
当一个MQTT客户端发布一个消息到一个特定的主题时,MQTT代理将把这个消息发送给所有订阅了这个主题的MQTT客户端。
-h # 指定要连接mqtt broker的地址 默认为localhost-p # 指定mqtt broker的连接端口号-u # 指定在与代理进行身份验证时要使用的用户名-P # 指定在与代理进行身份验证时要使用的密码(大写P)-m # 消息内容-t # 指定订阅的topic名称 -i # 用于为连接到MQTT代理的客户端分配一个唯一的客户端ID# 为了确保MQTT broker正确地将消息传递给所有订阅者,它需要对每个连接到它的客户端进行唯一标识,这就是客户端ID的作用。
例如:订阅消息
# 连接到本地主机上运行的MQTT代理,并订阅主题“topic/test”上的所有消息。mosquitto_sub -h localhost -t "topic/test" # 例如:mosquitto_sub -h localhost -t "/xyz" -i "client1" -u bruce -P lan1532
配置文件说明:
pid_file /var/run/mosquitto.pid# 消息持久存储persistence truepersistence_location /var/lib/mosquitto/# 日志文件存放位置log_dest file /var/log/mosquitto/mosquitto.log# 存放子配置文件位置include_dir /etc/mosquitto/conf.d# 指定端口号port 1883# 指定协议为MQTT协议 如果需要外网可以访问,就必须指定mqtt协议protocol mqtt# 设置最大连接数max_connections -1# 禁止匿名访问 默认是允许匿名用户访问的allow_anonymous false
mqtt broker
账号密码的创建:
如果关闭了匿名用户访问,需要mqtt broker指定的账号密码才能发布或者订阅消息。
mosquitto_passwd:用于Mosquitto用户认证配置
# 格式mosquitto_passwd [ -H hash ] [ -c | -D ] passwordfile username# 选项 -c # 是创建一个新的文件,只保存一个用户 -b # 在文件中新增一个用户在最后 -D # 从文件中删除指定用户 -H # 指定密码加密方式
配置要点:
# 1. 配置文件中加入一下配置 password_file /mosquitto/pwdfile # 认证配置acl_file /mosquitto/aclfile # 权限配置# 2. #创建用户和密码 mosquitto_passwd -c /mosquitto/pwdfile usernameroot@ubuntu1804:~# mkdir /mosquittoroot@ubuntu1804:~# mosquitto_passwd -c /mosquitto/pwdfile tomPassword: Reenter password: # 3. 权限配置vim /mosquitto/aclfile
例如:配置mqtt broker的非匿名模式
# 1. 修改配置文件root@ubuntu1804:~# vim /etc/mosquitto/mosquitto.conf pid_file /var/run/mosquitto.pidpersistence truepersistence_location /var/lib/mosquitto/log_dest file /var/log/mosquitto/mosquitto.loginclude_dir /etc/mosquitto/conf.dallow_anonymous falsepassword_file /mosquitto/pwdfileacl_file /mosquitto/aclfileport 1883protocol mqtt# 2. 添加mqtt broker的用户名和权限root@ubuntu1804:~# mosquitto_passwd -c /mosquitto/pwdfile tomPassword: Reenter password: root@ubuntu1804:~# vim /mosquitto/aclfile user tomtopic write /#topic read /## 3. 重启mqttroot@ubuntu1804:~# systemctl restart mosquitto.service # 4. 发起监听root@ubuntu1804:~# mosquitto_sub -h localhost -t "/xyz" -p 1883 -u tom -P redhat# 5. 发送消息root@ubuntu1804:~# mosquitto_pub -h 10.0.0.33 -t "/xyz" -i "client3" -m "How are you to tom ?" -u tom -P redhat -p 1883
监听特定的topic:
发布消息:
EMQX:一款应用广泛的大规模分布式物联网 MQTT 服务器。自 2013 年在 GitHub 发布开源版本以来,目前全球下载量已超千万,累计连接物联网关键设备超过 1 亿台。
MQTT X :一款开源的跨平台桌面客户端,它简单易用且提供全面的 MQTT 5.0 功能、特性测试,可运行在macOS, Linux 和 Windows 上。
# emqx官网: https://www.emqx.io/zh/downloads?os=Windows# 项目地址: https://github.com/emqx/MQTTX# 下载地址: https://github.com/emqx/MQTTX/releases# 官网: https://mqttx.app/zh。
链接:
https://www.cnblogs.com/qumogu/p/16007609.html
https://segmentfault.com/a/1190000021106683
https://segmentfault.com/a/1190000040216396
关键词:
Copyright 2015-2022 西南艺术网 版权所有 备案号:皖ICP备2022009963号-8 联系邮箱:39 60 29 14 2@qq.com