关于EMQ的一些特性需要注意的地方

场景

用EMQ也有2年时间了,期间也遇到各种各样的问题,整理了一些要点分享一下。

示例

//Java例子
MqttClient client = new MqttClient("地址","客户端ID");
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false);//设置清除会话
options.setUserName("用户名");//设置用户名
options.setPassword("密码".toCharArray());//设置密码
client.setCallback(new PushCallback());//回调
client.connect(options);//连接
client.subscribe("主题", 0);//订阅主题

特性

1、MQTT客户端的Options是否设置了CleanSession为0(0或1,false或true);

首先,不管CleanSession设为true还是false,一旦客户端进行连接,MQTT服务器都会生成2个进程:

一个是TCP层负责跟客户端进行通讯的进程

另一个是该客户端的Session进程,专门负责该客户端订阅的主题,如果主题收到消息会先保留在Session,然后看对应client是否活着,活着就会通过它把消息发送出去。

知道了上述的情况后,我们再看一下CleanSession设置true和false的区别

官方文档是这样写的

如果CleanSession设置为true:客户端连接后,会在MQTT服务器创建一个新的临时会话(Session),在客户端断开时,Session自动销毁。

如果CleanSession设置为false:客户端连接后,会在MQTT服务器创建一个持久会话(Session),在客户端断开时,Session不会销毁,仍会保持并继续接收该客户端订阅的主题消息(注1),直到会话超时注销。

注1:如果原本的客户端重新连接到服务器,Session会把断线期间收到的消息发给客户端,匹配客户端的条件是通过ClientID,所以如果每次连接的ClientID都不相同的话,则没必要设置CleanSession为false,这样会造成资源浪费。

然后我们再来看下官方给出的Session过期时间

v1.0版本的EMQ

v2.0版本的EMQ

在V1.0的EMQ,Session的过期时间是2天

在V2.0的EMQ,Session的过期时间是2小时(官方文档写着2小时,但实际看了测试环境和线上装的EMQ2.0配置文件,写着的是2天和1天)

2、发布消息的Qos和订阅消息的Qos

 

 

 

注:仅供自己学习,记录问题和参考,若有带来误解和不便请见谅,共勉!

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值