RabbitMQ 双机系统偶尔丢失消息问题排查

实话说起来,这个问题,实际是一个非常低级的错误导致的,算不得什么高深的技术问题。但是在排查的过程中,却是费了好大的功夫,死了不少脑细胞。所以也值得记录一下,算作给大家提个醒,或许可以帮大家节省点时间。

情况是这样的,我们的一个项目,采用双机热备的模式部署了一套应用系统,这个应用系统和上层的业务系统之间通过RabbitMQ进行消息交互。上层业务系统发布业务数据,应用系统订阅业务数据并处理。由于是双机热备模式,所以程序上还做了处理,只有主机负责订阅业务数据,备机不会进行订阅。

在开发测试阶段发现,应用系统偶尔会出现收不到上层业务系统发布的业务数据的情况。经过检查,RabbitMQ的队列中没有消息堆积,这说明要么上层业务系统没有将消息放入队列中,要么订阅过程中发生了消息丢失。

根据上面的判断,第一反应是网络问题,于是对网络进行了检测,排除了网络质量的问题。然后怀疑是我们业务系统没有正确处理订阅消息导致的,于是又在主机上进行了网络抓包,发现确实没有收到该订阅的消息。 既然网络没有问题,又确实没有收到消息,所以进一步怀疑是上层系统的问题,结果上层系统排查了半天,确认消息确实发布到了队列中。

于是问题就来了,既然消息进入了队列,队列里消息也被消费了,但为啥业务系统收不到? 于是大家一顿头脑风暴,最后突然间想到,双机系统出了问题? 该被主机处理的消息,被备机订阅到了?导致主机消息丢失?

按照这个思路一查,发现确实是这样的。原本不应该订阅和消息消息的备机居然收到了消息。根据设计这不应该发生。仔细一查,原来是程序出了BUG.

最后总结下来,虽然是一个低级的程序bug,但是排查过程中,浪费了太多的时间,主要是大家都没有考虑到双机系统会出现备机消费消息的可能性。 这个问题以后在双机或者多机系统中,应该最为一个排查项来考虑,以免走弯路。

相关推荐
livemetee38 分钟前
关于【Kafka高可用配置】
分布式·kafka
TTBIGDATA1 小时前
【Ambari Plus】11.Kafka 安装
大数据·hadoop·分布式·kafka·ambari·hdp·ambari plus
李昊哲小课1 小时前
Ubuntu26.04 搭建 Hadoop3.5.0 完全分布式
大数据·hadoop·分布式·ubuntu·hdfs·mapreduce
newbe365243 小时前
我们如何使用 impeccable 优化前端界面设计与实现稳定性
前端·人工智能·分布式·github·aigc·wpf
清心歌12 小时前
Seata AT 模式简单学习及总结
分布式·seata
rebibabo16 小时前
Java基础(番外) | Kafka 入门:分区、副本与消费者组原理
java·分布式·kafka·学习笔记·副本·分区·异步日志
swg32132118 小时前
Kafka基于ZK和KRaft的设计原理与差异
分布式·kafka
gb448oww518 小时前
Redis分布式锁进阶第三十五篇
数据库·redis·分布式
2601_9624408420 小时前
计算机毕业设计之jsp教室管理系统
java·开发语言·笔记·分布式·算法·课程设计·推荐算法
无小道1 天前
Redis——主从复制
数据库·redis·分布式·主从