当前位置:首页 > 大杂烩 > 正文内容

mqtt消息过期间隔学习

高老师2个月前 (12-04)大杂烩99

4.2 消息过期间隔

4.2.1 消息过期间隔简介

MQTT 可以通过Session Expiry Interval为离线客户端缓存尚未发送的消息,然后在客户端恢复连接时发送。但如果客户端离线时间较长,可能有一些寿命较短的消

息已经没有必要必须发送给客户端了,继续发送这些过期的消息,只会浪费网络带宽和客户端资源。

举例:以联网汽车为例,我们可以向车辆发送建议车速使它能够在绿灯期间通过路口,这类消息通常仅在车辆到达下一个路口之前有效,生命周期非常短暂。


消息过期间隔是 MQTT 5.0 引入的一个新特性,它允许发布端为有时效性的消息设置一个过期间隔,如果该消息在服务端中停留超过了这个指定的间隔,那么服务端将

不会再将它分发给订阅端。默认情况下,消息中不会包含消息过期间隔,这表示该消息永远不会过期。


注意:如果客户端在发布消息时设置了过期间隔,那么服务端在转发这个消息时也会包含过期间隔,但过期间隔的值会被更新为服务端接收到的值减去该消息在服务端停留的

时间。这可以避免消息的时效性在传递的过程中丢失,特别是在桥接到另一个MQTT 服务器的时候

4.2.2 消息过期间演示

具体步骤如下所示:

1、创建一个 pub的客户端链接,链接到MQTT服务端

2、新建一个名为 sub 的客户端连接用于订阅,并将 Session Expiry Interval 设置为 300 秒表示这个会话状态的数据在服务端保存300s。

3、连接成功后,我们订阅主题 mqttx_a9d86661/demo,使用 Client ID 作为主题前缀可以有效避免主题重复:

4、订阅成功后,我们断开 sub 客户端与服务器的连接,然后切换到 pub 客户端,向主题 mqttx_a9d86661/demo 发布以下两条 Message Expiry Interval 分

别为 5 秒和 60 秒的消息:

5、发布完成后,切换到 sub 客户端,将 Clean Session 设置为 false 表示想要恢复之前的会话,然后等待至少 5 秒再重新连接。我们将看到 sub 只收到了过

期时间为 60 秒的消息,因为此时另一条消息已经过期:


扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/863.html

分享给朋友:

“mqtt消息过期间隔学习” 的相关文章

Application的错误使用

Application的错误使用

Application 对象用于存储和访问来自任意页面的变量,类似 Session 对象。不同之处在于所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对应的。很多的书籍中介绍的Application对象都喜欢以统计在线人数来介绍Application 对象...

Git日志查看和版本切换

Git日志查看和版本切换

日志查看:git log版本切换:方式1:git  reset  --hard  HEAD^   倒退一个版本git  reset  --hard  HEAD^^  倒退两个版本方式2:(版本号的形式,建议版本号码补充完...

c#关闭计算机的代码

c#关闭计算机的代码

    1.关机Process.Start("shutdown", "-s -t 0");    2. 注销  Proc...

IE浏览器无法显示此页解决方案

IE浏览器无法显示此页解决方案

方案1.IE浏览器"无法显示此页"的解决办法(1).按下Win+R键打开运行,输入netsh winsock reset,回车;(2).重启即可. 方案2.IE浏览器"无法显示此页"的解决办法 (1).设置-连接-局域网设置-自动检测设置开...

IIS7.0无法加载CSS的处理办法

IIS7.0无法加载CSS的处理办法

首先网页全部是纯静态的文件,本地测试正常访问,服务器端无法加载CSS,并且无法查看CSS文件的内容。 解决方案:关闭网站的压缩->>静态压缩和动态压缩...

nginx配置https,nginx ssl配置

nginx配置https,nginx ssl配置

首先在阿里云申请免费的证书,选择自动生成证书。然后就是nginx虚拟主机配置文件的修改。以下是我的配置文件(因为公司开发小程序,没有办法只能使用https)。您只需要关注带有ssl的配置选项,我增加了一个监听80和443的端口,同时增加了http跳转https的配置server  &nbs...