MQTT-发布与订阅的报文

这篇具有很好参考价值的文章主要介绍了MQTT-发布与订阅的报文。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MQTT发布订阅流程

在MQTT发布/订阅模式中,一个客户端既可以是发布者,也可以是订阅者,也可以同时具备这两个身份。当客户端发布一条消息时,它会被发送到代理,然后代理将消息路由到该主题的所有订阅者。当客户端订阅一个主题时,它会收到代理转发到该主题的所有消息

发布消息报文-Publish

客户端连接broker后就可以发布消息,发布消息需要用Publish报文

Publish报文基础字段:

  • Topic Name-必填

    • 字段类型:utf-8类型的字符串

    • 字段含义:指定发布消息的主题,一条消息只能指定一个主题,如果要发送给多个主题需要指定多条消息

  • QoS-必填

    • 字段类型:int
    • 字段含义:指定消息的服务质量等级,基础介绍中的QoS level 1、2、3
  • Payload-必填

    • 字段类型:binary(二进制)
    • 字段含义:用于指定消息的实际内容,MQTT作为二进制协议,payload可以是任何格式的协议,json、二进制、密文等
  • Retained-选填

    • 字段类型:bool
    • 字段含义:当前消息是否为保留消息
  • Packet ID

    • 唯一的标记一条消息,QOS为1或者2的时候固定出现
    • mqtt客户端内部实现,无需我们手动实现
  • DUP

    • 消息是否重发标识,QoS 1&2的时候固定出现
    • mqtt客户端内部实现,无需我们手动实现
订阅主题报文-Subscribe

订阅主题需要使用Subscribe报文,主要包含一个Packet ID 和Subscription List(订阅列表)

  • Packet ID

    用来唯一标识Subscribe报文以及匹配服务端返回的SUBACK的 Packet ID,无需手动设置

  • Subscription List

    订阅列表可以包含多个订阅,每个订阅有一个topic filter和 qos组成,可以通过Subscribe报文一次性订阅多个主题,Subscribe中主题过滤器和Publish中topic不同,可以使用通配符匹配多个主题MQTT-发布与订阅的报文
    而Publish中每个消息必须指定一个明确主题
    MQTT-发布与订阅的报文
    订阅报文中的的QoS字段是代理向订阅者转发消息时能使用的最大等级, 如果超过这个QoS等级的消息也会转发,如果发送这种情况,消息也会转发,但是QoS会降级,比如订阅的时候请求的等级为1,发布者如果发布的为2等级,代理转发的时候会降级为1,如果发布者发布0或者1,因为没有超过请求者最大的QoS,会保持不变,相当于消息转发时候的QoS等级永远是消息发布时的QoS等级和订阅时候服务端授予的QoS等级这两者的最小值

  • 订阅逻辑

    订阅的时候同一个客户端使用相同主题的过滤器多次订阅时,新的订阅将覆盖旧的订阅,不会出现订阅失败和收到重复的消息,如果同一个客户端使用不同的主题过滤器进行订阅,不同的主题过滤器匹配到同一个主题时,每个订阅都将收到一次消息

MQTT-发布与订阅的报文

订阅可能会失败,比如不具备主题的访问权限或者拒绝订阅,broker会返回SUBACK报文返回订阅的结果,SUBACK报文中包含Subscribe报文一致的Packet ID,以及和订阅列表一一对应的Reason Codes

  • Reason Codes
    订阅结果的原因码
    • 0x00-订阅成功且最大QoS等级为0
    • 0x01-订阅成功且最大QoS等级为1
    • 0x02-订阅成功且最大QoS等级为2
    • 0x80-订阅失败
取消订阅报文-Unsubscribe

取消订阅报文与订阅报文类型,包含一个Packet ID 和一个期望取消的主题过滤器列表,想要取消的Topic filter 需要与实际订阅的 Topic filter完全的文本匹配MQTT-发布与订阅的报文

Unsubscribe报文同样也有UNSUBACK报文进行响应,但是在MQTT 3.1.1没有Reason Codes原因码确认是否成功, 在MQTT 5.0里面进行补充,有对应Reason Codes文章来源地址https://www.toymoban.com/news/detail-420502.html

到了这里,关于MQTT-发布与订阅的报文的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布

    1.1 什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。 MQTT最大优点在于用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息

    2024年02月10日
    浏览(39)
  • ESP32+MQTT+MySQL实现发布订阅【气味数据收集】

    🔮🔮🔮🔮🔮相关文章🔮🔮🔮🔮🔮 ESP32连接MQ Sensor实现气味反应 🔗 https://blog.csdn.net/ws15168689087/article/details/131365573 ESP32连接云服务器【WebSocket】 🔗 https://blog.csdn.net/ws15168689087/article/details/131406163 个人云服务器搭建MQTT服务器 🔗 https://blog.csdn.net/ws15168689087/article/details/

    2024年02月17日
    浏览(37)
  • 【Ubuntu搭建MQTT Broker及面板+发布消息、订阅主题】

    根据自己的服务器是否开始了防火墙放行端口(18083 默认面板端口) 访问:域名:18083 用户名是admin,初始密码是public。登陆后需要立即修改密码,还可以新增用户 至此搭建完成,我们使用本地的进行发布订阅测试 最后一个免费版本下载点击链接下载 https://newbie-typora.oss-cn-

    2024年02月09日
    浏览(36)
  • 前端mqtt的详细使用(包含mqtt服务器部署,前端vue3使用mqtt连接、订阅主题、发布等)

    ​ MQTT(消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的通讯协议,该协议构建于TCP/IP协议上。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。MQTT 协议的应用场景包括物联网、移动应用、车联网、智能

    2024年02月08日
    浏览(65)
  • 一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布&MQTT 客户端重连

    简介: 之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用RabbitMQ,看过的朋友都说写的比较详细,希望再总结一下目前比较流行的MQTT。所以接下来,就来介绍什么MQTT?它在IoT中有着怎样的作用?如何在项目中使用MQTT? 之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用

    2024年02月05日
    浏览(42)
  • 【MQTT】基于阿里云物联网平台实现两设备间相互订阅及发布消息

    一、准备: 1.下载MQTT.fx - 1.7.1工具 https://www.jianshu.com/p/c9f50cf81cd2 2.进入物联网平台,并按照产品文档创建产品及设备 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 3.打开两个MQTT.fx工具,并分别填写相关设备信息,连接物联网平台(参考阿里云产品文档)。  二

    2024年02月02日
    浏览(52)
  • MQTT记录(概述,docker部署,基于spring-integration-mqtt实现消息订阅与发布,客户端工具测试)

    需要spring-boot集成spring-integration-mqtt代码的直接跳到第5部分 1.1 MQTT是什么呢? message queue telemetry translation 是一种基于发布与订阅的轻量级消息传输协议.适用于低带宽或网络不稳定的物联网应用.开发者可以使用极少的代码来实现物联网设备之间的消息传输.mqtt协议广泛应用于物

    2024年02月12日
    浏览(46)
  • 设计模式 ~ 发布订阅模式

    用于实现对象之间的松耦合通信; 在该模式中,存在一个或多个发布者(Publishers)和一个或多个订阅者(Subscribers); 发布者负责发布消息,而订阅者负责订阅感兴趣的消息并在接收到消息时做出相应的处理。 Subject 和 Observer 直接绑定,中间无媒介; Publisher 和 Observer 相互

    2024年02月16日
    浏览(47)
  • 设计模式之订阅发布模式

    订阅发布模式(Publish-Subscribe Pattern)是一种行之有效的解耦框架与业务逻辑的方式,也是一种常见的观察者设计模式,它被广泛应用于事件驱动架构中。 在这个模式中,发布者(或者说是主题)并不直接发送消息给订阅者,而是通过调度中心(或者叫消息代理)来传递消息

    2024年02月06日
    浏览(45)
  • js设计模式——发布订阅模式

    一、概述 发布订阅模式是一种常用的设计模式,它定义了一种一对多的关系,让多个订阅者对象同时监听某一个主题对象,当主题对象发生变化时,它会通知所有订阅者对象,使它们能够自动更新 。 二、优缺点 1. 优点: 实现了发布者和订阅者之间的解耦,提高了代码的可

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包