项目场景:Mqtt 物联网 spring 连接即断开
mqtt : org.eclipse.paho.client.mqttv3.MqttException
spring : 3.0.2
spring 集成
问题描述
spring 在启动时就同时启动MQTT监听连接。
连接后立马报 MQTT断开连接((32109) - java.io.EOFException)的错误
并且如果设置了自动重连的话会导致每次重连后都报一次错误导致每次错误都进行一次重新连接。
但这个断开的报错实际上并没有导致mqtt服务端断开,事实上还是有客户端连接的
/**
* 启动项目时同时启动MQTT监听
*/
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
mqttClient = new MqttClient(MQTTConfig.mHost, mClientId, new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
mqttClient.setCallback(mqttCallback);
mqttClient.connect(options);
}
原因分析:
可能是依赖冲突或者监听顺序机制。原因尚不明确
解决方案:
解决方案重写connectionLost方法
并且对连接处理加上锁和是否建立连接判断
不加锁的话会导致报错比连接的反馈快一步
导致!getMqttClient().isConnected() 为true
而进行二次连接