写了一个简单的循环,用一个客户端发消息
同时用另外一个客户端接收,少量消息时倒也能接收到全部的发送消息
这个k值比较小的时候没啥问题
k=1W 每次发完就会自动断开重连一次
k=10W时,只接收到了6.9W左右数据
这个发送的客户端是为啥会在发送大量请求后断开重连一次
版本信息:[5.0.17] 单节点
写了一个简单的循环,用一个客户端发消息
这个k值比较小的时候没啥问题
k=1W 每次发完就会自动断开重连一次
k=10W时,只接收到了6.9W左右数据
这个发送的客户端是为啥会在发送大量请求后断开重连一次
版本信息:[5.0.17] 单节点
你看看 emqx 有没有错误日志:https://www.emqx.io/docs/zh/latest/observability/log.html#日志
然后看看监听器的断开统计:emqx ctl listeners
日志上传了,有什么说法没有啊
订阅者 hdIotService_dev_2 是断开了,因为他会话是保持的,所以日志里都是消息队列被塞满的告警:
2024-02-20T14:46:41.763000+08:00 [warning] msg: dropped_msg_due_to_mqueue_is_full, mfa: emqx_session:handle_dropped/3, line: 639, peername: 127.0.0.1:11023, clientid: hdIotService_dev_2, topic: /hd/demo/rec1/81190, payload: #{extra => [],flags => #{dup => false,retain => false},from => <<"hdDemoService_dev_56">>,headers => #{peerhost => {127,0,0,1},properties => #{'Message-Expiry-Interval' => 180},proto_ver => 5,protocol => mqtt,username => <<"hd">>},id => <<0,6,17,202,146,165,77,201,244,66,0,0,10,191,4,22>>,qos => 1,timestamp => 1708411601636,topic => <<"/hd/demo/rec1/81190">>}, queue: #{dropped => 0,len => 1000,max_len => 1000,store_qos0 => true}
但没有日志表明为什么订阅客户端断开了,从现象上看,订阅者是主动断开的,问题大概还是因为收到大量消息,处理出了问题所以挂掉了。
单个客户端一般是处理不了太多的消息的,可以用共享订阅或者服务端的 webhook 方式解决收取大量消息的问题。