iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >MQTT 遗嘱消息(Will Message)的使用
  • 273
分享到

MQTT 遗嘱消息(Will Message)的使用

2023-06-03 18:06:46 273人浏览 独家记忆
摘要

简介当客户端断开连接时,发送给相关的订阅者的遗嘱消息。以下情况下会发送 Will Message:服务端发生了I/O 错误或者网络失败;客户端在定义的心跳时期失联;客户端在发送下线包之前关闭网络连接;服务端在收到下线包之前关闭网络连接。遗嘱

简介

当客户端断开连接时,发送给相关的订阅者的遗嘱消息。以下情况下会发送 Will Message:

  • 服务端发生了I/O 错误或者网络失败;
  • 客户端在定义的心跳时期失联;
  • 客户端在发送下线包之前关闭网络连接;
  • 服务端在收到下线包之前关闭网络连接。

遗嘱消息一般通过在客户端 CONNECT 的时候指定。如下所示,在连接的时候通过调用 MQttConnectOptions 实例的 setWill 方法来设定。任何订阅了下面的主题的客户端都可以收到该遗嘱消息。

//方法1MQttConnectOptions.setWill(MqttTopic topic, byte[] payload, int qos, boolean retained)//方法2MqttConnectOptions.setWill(java.lang.String topic, byte[] payload, int qos, boolean retained)

使用场景

在客户端 A 进行连接时候,遗嘱消息设定为”offline“,客户端 B 订阅这个遗嘱主题。当 A 异常断开时,客户端 B 会收到这个”offline“的遗嘱消息,从而知道客户端 A 离线了。

Connect Flag 报文字段

Bit7654210
User Name FlagPassWord FlagWill RetainWill QoSWill FlagClean StartReserved
byte 8XXXXXXX

遗嘱消息在客户端正常调用 disconnect 方法之后并不会被发送。

Will Flag 作用

简而言之,就是客户端预先定义好,在自己异常断开的情况下,所留下的最后遗愿(Last Will),也称之为遗嘱(Testament)。这个遗嘱就是一个由客户端预先定义好的主题和对应消息,附加在CONNECT的可变报文头部中,在客户端连接出现异常的情况下,由服务器主动发布此消息。

当Will Flag位为1时,Will QoS和Will Retain才会被读取,此时消息体中要出现Will Topic和Will Message具体内容,否则Will QoS和Will Retain值会被忽略掉。

当Will Flag位为0时,则Will Qos和Will Retain无效。

命令行示例

下面是一个Will Message的示例:

  1. Sub端clientid=sub预定义遗嘱消息:

    mosquitto_sub --will-topic test --will-payload die --will-qos 2 -t topic -i sub -h 192.168.1.1
  2. 客户端 clientid=alive 在 192.168.1.1(EMQ服务器) 订阅遗嘱主题

    mosquitto_sub -t test -i alive -q 2 -h 192.168.1.1
  3. 异常断开Sub端与Server端(EMQ服务器)连接,Pub端收到Will Message 。

高级使用场景

这里介绍一下如何将 Retained 消息与Will 消息结合起来进行使用。

  1. 客户端 A 遗嘱消息设定为”offline“,该遗嘱主题与一个普通发送状态的主题设定成同一个 A/status
  2. 当客户端 A 连接时,向主题 A/status 发送 “online” 的 Retained 消息,其它客户端订阅主题 A/status的时候,获取 Retained 消息为 “online” ;
  3. 当客户端 A 异常断开时,系统自动向主题 A/status 发送”offline“的消息,其它订阅了此主题的客户端会马上收到”offline“消息;如果遗嘱消息被设定了 Retained 的话,这时有新的订阅A/status主题的客户端上线的时候,获取到的消息为“offline”。

--结束END--

本文标题: MQTT 遗嘱消息(Will Message)的使用

本文链接: https://www.lsjlt.com/news/235275.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MQTT 遗嘱消息(Will Message)的使用
    简介当客户端断开连接时,发送给相关的订阅者的遗嘱消息。以下情况下会发送 Will Message:服务端发生了I/O 错误或者网络失败;客户端在定义的心跳时期失联;客户端在发送下线包之前关闭网络连接;服务端在收到下线包之前关闭网络连接。遗嘱...
    99+
    2023-06-03
  • 怎么在SpringBoot2.0中使用MQTT实现一个消息推送功能
    今天就跟大家聊聊有关怎么在SpringBoot2.0中使用MQTT实现一个消息推送功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。springboot是什么springboot一种...
    99+
    2023-06-14
  • 使用RocketMQTemplate发送带tags的消息
    RocketMQTemplate发送带tags的消息 RocketMQTemplate是RocketMQ集成到Spring cloud之后提供的个方便发送消息的模板类,它是基本Spr...
    99+
    2024-04-02
  • 怎么使用spring的消息转换器
    这篇文章给大家介绍怎么使用spring的消息转换器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体内容如下//domainpackage com.crazy.goods.tools;public class Phon...
    99+
    2023-05-31
    spring
  • Linux中消息队列的使用方式
    这篇文章主要讲解了“Linux中消息队列的使用方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中消息队列的使用方式”吧!1 消息队列的概念及使用过程1)消息队列的概念消息队列就是...
    99+
    2023-06-15
  • SpringBootHttpMessageConverter消息转换器的使用详解
    目录消息转化器的作用消息转化器的主要方法默认配置的消息转化器注意事项消息转化器的作用 将请求报文转化为Java对象将Java对象转化为响应报文 消息转化器的主要方法 getSuppo...
    99+
    2024-04-02
  • 如何使用RocketMQTemplate发送带tags的消息
    这篇文章将为大家详细讲解有关如何使用RocketMQTemplate发送带tags的消息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。RocketMQTemplate发送带tags的消息RocketMQT...
    99+
    2023-06-20
  • 使用PHP实现消息队列的开发
    随着现代互联网应用对高并发、高吞吐量和高可靠性的要求越来越高,消息队列作为一种异步解耦系统架构方式越来越被应用在互联网领域的各个方面。其原理是先将消息发送到消息队列中,等待异步消费,从而达到解耦的目的,提高系统的可扩展性与可维护性。在目前市...
    99+
    2023-05-25
    PHP 消息队列 开发
  • Android 消息分发使用EventBus的实例详解
    Android 消息分发使用EventBus的实例详解1. AndroidStudio使用dependencies { //最新版本 compile 'org.greenrobot:eventbus:3.0.0' //可以翻倍提高E...
    99+
    2023-05-30
    android eventbus roi
  • Redis 使用 List 实现消息队列的优缺点
    目录什么是消息队列消息队列满足哪些特性消息有序性重复消息处理可靠性List 实现消息队列LPUSHRPOP实时消费问题重复消费消息可靠性需要注意的是Redission 实战添加依赖J...
    99+
    2024-04-02
  • java消息队列mq的使用场景是什么
    Java消息队列(MQ)的使用场景主要包括以下几个方面:1. 异步通信:当系统中的不同模块之间需要进行异步通信时,可以使用消息队列来...
    99+
    2023-10-09
    java
  • Node.js WebSocket中的ping和pong消息是如何使用的?
    WebSocket概述 WebSocket是一种双向通信协议,允许客户端和服务器在单个TCP连接上进行全双工通信,即使在没有HTTP请求的情况下也是如此。WebSocket的建立需要经过HTTP握手过程,握手成功后,通信双方即可通过We...
    99+
    2024-02-06
    Node.js WebSocket ping pong
  • 关于使用pyqt弹出消息提示框的问题
    目录安装 pyqt安装遇到问题还有 To avoid this problem you can invoke Python with '-m pip' instead...
    99+
    2024-04-02
  • 使用Swoole和Workerman加速PHP与MySQL的消息传输
    随着互联网的发展,PHP在网站开发中的应用越来越广泛。然而,由于PHP是解释型语言,每次与MySQL进行交互时都需要建立数据库连接,这会导致性能上的一定损耗。为了解决这个问题,我们可以借助Swoole和Workerman来加速PHP与MyS...
    99+
    2023-10-21
    swoole Workerman 加速
  • 如何使用MySQL创建买菜系统的用户消息表
    如何使用MySQL创建买菜系统的用户消息表买菜系统是一种在线购物平台,为用户提供了方便快捷的食材购买服务。用户在使用该系统进行购物的同时,系统也需要向用户发送一些重要的消息,如订单确认、配送信息等。为了管理和记录这些消息,购物系统必须建立一...
    99+
    2023-11-01
    MySQL 创建 用户消息表
  • 消息中间件ActiveMQ的简单入门介绍与使用
    目录一、什么是消息中间件二、什么是ActiveMQ三、什么时候需要用ActiveMQ四、如何使用ActiveMQ浅谈MQTT1、什么是MQTT2、如何理解MQTT3、如何使用MQTT...
    99+
    2024-04-02
  • C#使用udp如何实现消息的接收和发送
    目录使用udp实现消息的接收和发送C# 运用UDP服务端界面客户端界面总结使用udp实现消息的接收和发送 代码比较简单,但是别忘记关闭防火墙进行测试。 首先便是服务端,使用Socke...
    99+
    2023-02-26
    C#使用udp udp消息接收 udp消息发送
  • 如何使用TTL+DLX的方式来实现 延迟消息
    这篇文章主要介绍如何使用TTL+DLX的方式来实现 延迟消息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!正文:  网上都是2种办法去实现,第二种我就不说了,要升级rabb...
    99+
    2024-04-02
  • 如何使用OutputDebugString打印字符串变量中的消息
    要使用OutputDebugString打印字符串变量中的消息,可以按照以下步骤进行操作:1. 引入Windows.h头文件,该头文...
    99+
    2023-09-27
    字符串
  • 消息队列 RabbitMQ 与 Spring 整合使用的实例代码
    一、什么是 RabbitMQRabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送...
    99+
    2023-05-31
    rabbitmq spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作