到emqx连接终端:reason: {shutdown,takeovered}

环境信息

  • EMQ X 版本:4.3.8
  • 操作系统及版本:CentOS 7.6 64位
  • 其他

问题描述

java服务连接emqx时,总是中断。

看emqx日志如下错误:
Svc@10.29.xx.xx:nnn file: emqx_connection.erl, line: 520, mfa: {emqx_connection,terminate,2}, msg: terminate, pid: <0.798.237>, reason: {shutdown,takeovered}

服务连接记录的日志
org.eclipse.paho.client.mqttv3.MqttException: Timed out waiting for a response from the server
at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:31)
at org.eclipse.paho.client.mqttv3.internal.ClientState.checkForActivity(ClientState.java:742)
at org.eclipse.paho.client.mqttv3.internal.ClientComms.checkForActivity(ClientComms.java:816)
at org.eclipse.paho.client.mqttv3.internal.ClientComms.checkForActivity(ClientComms.java:802)
at org.eclipse.paho.client.mqttv3.TimerPingSender$PingTask.run(TimerPingSender.java:79)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

配置文件及日志

mqtt客户端也不多,不超过10个

是多线程发消息吗?如果是的。多个线程用的同一个clientID,出现抢占情况了

不是多线程,就一个mqttClient实例

reason: {shutdown,takeovered} 客户端被踢掉。基本是你客户端ID重复导致前一个连接被后一个踢掉。

最后怎么解决的

有 takeovered 的错误,是由于 ClientID 重复了,然后新链接把旧链接踢下去了,被踢的客户端回报这个错误,所以你需要检查下你的客户端 ID