rabbitmq无法监听无法消费的问题记录和处理

部署情况

微服务部署3个节点的消费者,mq集群的

问题情况

生产者发送的消息,消费者那边没有任何反应和日志。

问题排查

打开mq的ui控制界面。发现对应的队列有1159个消息没有消费。
此队列情况是
未消费 409
消费中:750
总共:1159

这时候查看消费者连接情况是
三个微服务都有连接消费,
消费中的数量都是250
达到了对应的阻塞上限(可以配置)
所以后续的新过来的消息阻塞中,就不会推送的此三个微服务的节点中,既无法消费,导致出现问题

出现阻塞的原因排查

由于生产者推送消息时,将对象使用了一个json的序列化,三个消费者的微服务,rabbitconfig中又没有使用序列化,导致监听时转换失败,无法进入监听消费方法。也就无法确认此消费,导致了阻塞,到达250的上限。

解决办法

经过排查,想将这些消费不了的,转换异常的通过控制台消费出去,可能后面的409个消息中有能用的消息。所以暂时想把现在阻塞中丢弃。
通过界面消费时,选择消费750个消息,结果发现是将未消费的409个给消费了。而阻塞中的750个还在界面中存在也就没法解决,新的消息还是没法消费,而且还造成了有用的数据丢失,(警示一下自己)
最终的采取方案是,将三个消费者的微服务的节点都停掉,这时候mq队列中的750个消息就是在待消费的状态了。这时候点击界面的获取消息,就将这750个消息的丢弃了。这时候启动三个微服务,生成者发送的消息就能正常被消费了。

2021年3月10日22:59:49

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐