系统一直报一个拥挤的预警然后消息量也没有很大但是mqtt会断连

connection congested: #{buffer => 4096,clientid => <<“gov2x_v3.0_dev_rsm_8f429491563898f6e34d31af9067dbc1”>>,conn_state => connected,connected_at => 1698970935669,high_msgq_watermark => 8192,high_watermark => 1048576,memory => 602072,message_queue_len => 0,peername => <<“210.21.52.68:41828”>>,pid => <<“<0.8912.68>”>>,proto_name => <<“MQTT”>>,proto_ver => 4,recbuf => 369280,recv_cnt => 56,recv_oct => 651,reductions => 226481,send_cnt => 168,send_oct => 696563,send_pend => 2723,sndbuf => 87040,sockname => <<“172.17.0.4:1883”>>,socktype => tcp,username => <<“v2x”>>}系统一直有这个告警,然后mqtt会断连,好难解决

gov2x_v3.0_dev_rsm_8f429491563898f6e34d31af9067dbc1 这个客户端消费消息过慢导致 TCP 连接阻塞。建议检查一下这个客户端接收消息速率有多大:

  • 如果非常小应该是客户端程序出现了问题,导致卡在某个逻辑上没有及时消费 MQTT 消息。如果是很大建议
  • 如果比较大,可能是网络带宽、客户端消费能力等限制导致消费速度跟不上给他发送消息的速度,这种情况可以用共享订阅来解决。或者如果这个客户端不是设备,而是一个服务端程序,最好不要用 MQTT 订阅方式,可用 webhook 等方式替代。

好的,我们是设备连的,先去排查下消费速度,之前其实也有往这方面想是不是消费太慢,但是这个消息其实每秒也就两千多没有很多,等测完消费速度再来看看,谢谢

单个连接每秒两千多实际上是很快的速度。所以建议用共享订阅或者 webhook 等数据集成方式替代。

噢 是总的2000多,然后分了几个topic,有一个topic高峰每秒得有700、800这个样子,然后就很容易断连,如果采取共享订阅,在一个服务器上部署多个服务共享一个订阅主题,效果会好一些吗,还是得分多个服务器部署

我理解如果不是带宽限制,同一个服务器上或者多个服务器部署都可以,当然最终以你的测试为准。

好的,谢谢!这就去试试