MQTT 的遗嘱消息的正确打开方式

最近在研究Qt中MQTT的使用,遇到一个棘手的问题,就是如何判断发布者或订阅者掉线的问题; 根据经验首先想到的肯定是心跳包,但是mqtt在物联网领域已有了很深的造诣,这点我都能想到的问题,开发者肯定考虑到了啊,经过找api,发现了willMessage, 遗嘱消息,顾名思义,不就是断气前的遗嘱吗?于是方向有了,就是用遗嘱消息。

一、使用总结

探索过程总是艰难的,就不赘述了,直接讲设置遗嘱消息的步骤

  • 根据MQTT的Qt接口中提到的,必须在断开连接的状态下设置遗嘱属性,也就意味着在连接前就要设置好遗嘱消息,估计是避免你刚连接上就嗝屁了,很有道理,考虑很周到。
    在这里插入图片描述
    同时,查看了qt官方提供的mqtt源码,证明了上述观点。其在连接时,就判断并设置好了遗嘱。
    在这里插入图片描述

分析到此为止,最终代码就不言而喻了:

	//...
	m_client->setHostname("http://localhost");
	m_client->setPort(1883);
	m_client->setWillTopic("jd/device/dead");
	m_client->setWillMessage("byebye");
	m_client->setWillQoS(1);
	m_client->setWillRetain(false);
	m_client->connectToHost();
	// ...

二、注意事项

从mqtt-5.0规范中截取的一张图:
在这里插入图片描述

从上图中可以看到,只有在非正常断开连接时,才会触发遗嘱消息

也就意味着调用disconnectFromHost()方法是不会触发此遗嘱消息的。

在mqtt-v3.xx规范中并没有提到,也可能是我没有看到,殊途同归,应该是一致的。

想想也有道理,正常死亡,自己是有机会去立遗嘱的;当非正常死亡,你的生前遗嘱就生效了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值