现象:在最近开发的IoT项目中使用MQ同边缘服务模块进行通信。当硬件设备离网,边缘服务会取消订阅相关Topic。设备上电上网时,边缘服务会订阅相关Topic,然后上报设备数据到我负责开发的服务来进行更新处理同时也会发起同步数据的操作。根据规则,更新操作时我这边是不会返送一个MQ消息的,并且控制台的日志也未见由更新操作yinf日志,但是边缘服务硬是有收到一条发自我这边的MQ消息!
原因:
@Override
public Boolean publish(String topic, String content) {
log.info("MQ---public--- 入参:topic:{};content:{}", topic, content);
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(mqttConfiguration.getQos());
/**
* Retained为true时MQ会保留最后一条发送的数据,当断开再次订阅即会接收到这最后一次的数据
*/
message.setRetained(false);
MqttClient mqttClient = publishRunner.getMqttPubClient();
try {
// 判定是否需要重新连接
if (mqttClient==null || !mqttClient.isConnected()) {
mqttClient = publishConn.getConn();
publishRunner.setMq