MQTT已断开连接 (32109) - java.io.EOFException

2,560 阅读1分钟

引入的包是:org.eclipse.paho.client.mqttv3

在测试emqx功能时,在消费者接收消息之后故意抛出异常,让emqx进行重连功能

/**
** 客户端收到消息触发*


**  @param topic 主题*
**  @param mqttMessage 消息*
/
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
log.error("=========故意抛出异常测试重连============== " + topic);
throw new Exception("=========故意抛出异常测试重连==============");
/ log.info("接收消息回调: 接收消息主题 : " + topic);

log.info("接收消息回调: 接收消息内容 : " + new String(mqttMessage.getPayload()));/*
}

已经设置了自动重连功能

options.setAutomaticReconnect(true);

在进行重连时过了几秒就报错

已断开连接 (32109) - java.io.EOFException
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:190)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:267)
at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:92)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:137)
... 1 more

重连代码

解决办法

发现是clientid冲突所致,就是不能有2个一样的clientid同时订阅到一个主题,那就随便修改一下clientid跟之前已经在订阅的不一样就可以了