emqx 出现msg: websocket_terminated, reason: {shutdown,idle_timeout}是什么原因

环境

  • EMQX 版本:5.0.20
  • 操作系统版本:

重现此问题的步骤

1.数量比较大的客户端发送消息时
2. mqtt的日志:2023-06-07T08:29:02+00:00 [SOCKET] @127.0.0.1:58392 msg: websocket_terminated, reason: {shutdown,idle_timeout}
3. 客户端出现:errrmsg=The client is not connected

预期行为

实际行为

这个是虽然创建了 ws 连接,但却长时间没有发送 MQTT CONNECT 报文来创建 MQTT 连接,就被关掉了

是我内网服务端,感觉是消息太大了或包这个错误,而且我们的TCP连接的,怎么出来了websocket方式

默认 ws 端口是开启的,你检查下是不是连错了端口,或者其他服务错误的连接到这些端口上了,或者直接关掉这些端口

websocket是8083和8084端口吗

默认是这两个的

检查了一下,我们确实没有这2个,如果服务端发送消息量大了,会不会把自己的心跳的消息也发不出来,造成中断

不会,心跳包是客户端发起的,只要收到了客户端的心跳表,就必然会回复。
非生产环境的话,可以将日志等级设置为 debug,看下客户端断开的原因。

_consumer@127.0.0.1:52236 msg: emqx_connection_terminated, reason: {shutdown,discarded}

这个错误是什么原因

这个是你的客户端发起了重新连接,且 clean_session = true,则之前的会话被丢掉时产生的日志。

2023-06-12T03:53:20+00:00 [MQTT] 5dbc67c4698140a4a124ef58ca443bc9@115.21.50.7:16911 msg: mqtt_packet_received, packet: CONNECT(Q0, R0, D0, ClientId=5dbc67c4698140a4a124ef58ca443bc9, ProtoName=MQTT, ProtoVsn=4, CleanStart=false, KeepAlive=20, Username=undefined, Password=)
2023-06-12T03:53:20+00:00 [AUTHN] 5dbc67c4698140a4a124ef58ca443bc9@115.236.11:16911 msg: authentication_result, reason: empty_chain, result: ignore
2023-06-12T03:53:20+00:00 [SOCKET] 5dbc67c4698140a4a124ef58ca443bc9@115.236117:19075 msg: emqx_connection_terminated, reason: {shutdown,takenover}
2023-06-12T03:53:20+00:00 [MQTT] 5dbc67c4698140a4a124ef58ca443bc9@115.236.11.7:16911 msg: mqtt_packet_sent, packet: CONNACK(Q0, R0, D0, AckFlags=1, ReasonCode=0)

问一下这个是什么原因断开

会话被新的连接(相同的 ClientID) 接管。