MQTT一些特殊的属性

1、会话清除标识session

标识 Client 是否建立一个持久化的会话。当 Clean Session 的标识被设置时候,代表 Client 希望建立一个持久会话的连接,Broker 将存储该 Client 订阅的主题和未接受的消息(QoS 大于 1 ),client离线重启后将收到这些消息;否则 Broker 不会存储这些数据,client离线重启后也不会收到消息。

应用场景:接收离线消息

Java代码设置:

MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false)

如何测试:可以先启动sender端,发送一条retained消息,在启动receiver端,可以查看是否收到消息。在设置setRetained为false可以对比

2、保留消息Retained Messages 

当设置Retain标识位的时候,该消息即为遗言消息。broker收到该消息后会保存此消息,当有新的订阅者订阅此主题时候,broker会立即发送此消息。有点类似于会话清除,不同的是遗言只有一条,后面的遗言消息会覆盖前面的。如果需要删除retain消息,可以发布一个空的retain消息,因为每个新的retain消息都会覆盖最后一个retain消息

MqttMessage message = new MqttMessage();
message.setRetained(true);

 3、最后遗嘱LWT(Last Will & Testament) 

遗言的设计初衷:物联网设备不少部署在网络信号很不好的环境下,难免有一些客户端会无故的和Broker断开连接。 当客户端连接到Broker时,可以指定LWT,Broker会定期检测客户端是否有异常。 当客户端异常掉线时,Broker就往连接时指定的topic里推送当时指定的LWT消息。入下:

MqttConnectOptions options = new MqttConnectOptions();
options.setUserName(userName);
options.setPassword(passWord.toCharArray());
// 设置超时时间
options.setConnectionTimeout(20);
// 设置会话心跳时间
options.setKeepAliveInterval(20);
//设置遗言消息
options.setWill("home/rome/light1","test".getBytes(),1,true);
try {
        client.setCallback(new PushCallback());
        client.connect(options);
        topic11 = client.getTopic(TOPIC);
      } catch (Exception e) {
            e.printStackTrace();
       }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值