MQTT QOS & Retained Message

项目终于基本完成了,记录一下,由于客户端误设置了发布保留消息,导致服务器每次上线都会收到客户端最后一条消息,先去解读并改了QOS的设置,并没有用,然后才发现有Retained Message的设置,直接false就可以了。

Qos 0/1/2的区别实测

最多一次的传输 消息是基于TCP/IP网络传输的。没有回应,在协议中也没有定义重传的语义。消息可能到达服务器1次,也可能根本不会到达。

至少一次的传输 服务器接收到消息会被确认,通过传输一个PUBACK信息。如果有一个可以辨认的传输失败,无论是通讯连接还是发送设备,还是过了一段时间确认信息没有收到,发送方都会将消息头的DUP位置1,然后再次发送消息。消息最少一次到达服务器。SUBSCRIBE和UNSUBSCRIBE都使用level 1 的QoS。 如果客户端没有接收到PUBACK信息(无论是应用定义的超时,还是检测到失败然后通讯session重启),客户端都会再次发送PUBLISH信息,并且将DUP位置1。 当它从客户端接收到重复的数据,服务器重新发送消息给订阅者,并且发送另一个PUBACK消息。

笔者做了一个实现消费端阻塞2秒消费一个内容,发布端1秒发布一个内容,等EMQ的最大拥塞使用完了之后消息在EMQ缓存的会后就会出现很多的重复消息

只有一次的传输 在QoS level 1上附加的协议流保证了重复的消息不会传送到接收的应用。这是最高级别的传输,当重复的消息不被允许的情况下使用。这样增加了网络流量,但是它通常是可以接受的,因为消息内容很重要。 QoS level 2在消息头有Message ID。

EMQ离线消息

保留消息 MQTT客户端向服务器发布(PUBLISH)消息时,可以设置保留消息(Retained Message)标志。保留消息(Retained Message)会驻留在消息服务器,后来的订阅者订阅主题时仍可以接收该消息。 例如mosquitto命令行发布一条保留消息到主题’a/b/c’: mosquitto_pub -r -q 1 -t a/b/c -m 'hello’ 之后连接上来的MQTT客户端订阅主题’a/b/c’时候,仍可收到该消息: $ mosquitto_sub -t a/b/c -q 1 hello 保留消息(Retained Message)有两种清除方式: 客户端向有保留消息的主题发布一个空消息: mosquitto_pub -r -q 1 -t a/b/c -m '’ 消息服务器设置保留消息的超期时间。

cleanSession 清理回话 MQTT客户端向服务器发起CONNECT请求时,可以通过’Clean Session’标志设置会话。 'Clean Session’设置为0,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。 'Clean Session’设置为1,表示创建一个新的临时会话,在客户端断开时,会话自动销毁。

(0)

相关推荐

  • 当下流行的物联网协议MQTT简介

    概述 MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器之间通信的桥梁. MQTT协议是为大量计 ...

  • mqtt协议 学习笔记

    文章目录 1. MQTT协议介绍 2. MQTT协议特性 3. MQTT协议的通信模型 3. MQTT的主题 4. MQTT协议的连接与会话 5. MQTT 报文格式 5.1 报文类型汇总 i. 连接 ...

  • 说到做到!

    之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦. 那么读者的要求必须要满足啊,所以现在 @一下这位小姐姐,来听课啦!什么是 MQTT 协议MQTT 协议的 ...

  • 消息推送标准协议:MQTT

    随着物联网(Internet of Things,IoT)的兴起,机器之间(Machine-to-Machine,M2M)的大规模信息沟通成为重要的课堂,之前HTTP的请求/回答(Request/Re ...

  • 用了那么久MQTT,这些知识点你了解吗

    来这里,还可以学习HAL库的使用哦 哈喽,小伙伴们,今天来聊一聊什么是MQTT协议,以及常用的几个术语是什么意思,有图有真相哦,欢迎阅读 1. 什么是MQTT   MQTT(MQ Telemetry ...

  • EMQ连接内存消耗

    Erlang进程消耗 EMQ对客户端链接使用链接进程(emqtt_client)和session进程(emqtt_session)分开的策略. 当一个mqtt的客户端连接到EMQ的服务器上的时候,首先 ...

  • '发信息' 不是send message!老外听到会懵圈的!

    信息时代, 每个人每天都要处理一大堆信息 "有什么事发信息给我" "到家给我发信息" -- 只是"发信息"应用如此频繁 英语怎么说你知道吗? ...

  • 基于RabbitMQ的MQTT使用

    因为公司业务需求用到MQTT,简单记录一下MQTT的部署,以及MQTTBOX的使用.首先需要安装好RabbitMQ,没安装可以参考我之前写的分享在centos7环境下安装RabbitMQ使用MQTT插 ...

  • '发信息' 不是send message!老外听到会懵圈的

    信息时代, 每个人每天都要处理一大堆信息 "有什么事发信息给我" "到家给我发信息" -- 只是"发信息"应用如此频繁 英语怎么说你知道吗? ...

  • C# WPF遮罩对话框(Popup Message Overlay/ Dialog Host)

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  • 成功Message=无法加载 DLL“XXX”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)解决

    private void frmScanM_Load(object sender, EventArgs e)         {             RFIDLIB.rfidlib_reader. ...

  • rabbitmq之Message durability

    消息持久性,通过consumer的ack机制,可以保证在message没有完全处理完之前,就出现consumer crash/ connection,channel close的场景下,message ...

  • 威纶通触摸屏通过MQTT和阿里云平台连接的方法

    [导读]MQTT协议在物联网中应用广泛,自动化产品也和物联网.互联网.大数据等结合越来越广广泛,本文详细介绍威纶通触摸屏利用EasyBuilder Pro的MQTT元件与阿里云平台连接,并通过Iot- ...

  • 一款Modbus 转为OPC UA、MQTT、华为云IoT、AWS IoT、阿里云IoT网关

    BL101是一款Modbus RTU.Modbus TCP转换为Modbus TCP.OPC UA.MQTT.华为云IoT.AWS IoT.阿里云IoT.金鸽云等协议的网关. BL101下行支持:Mo ...