使用WMQ中间件,出现了丢消息现象,不能确定是发送,接收,和MQ三者中哪一个出了问题,请帮助分析

wangchunsheng 发布于 2011/06/15 20:19
阅读 604
收藏 0

我们的一个老的告警处理项目,目前应用的大概有40多个地方,用了有好几年了,现在有两个省提出说丢告警,于是对问题进行了分析。

首先查的发送方,我们的一个C++的程序,因为不太懂,问了一些人,并查了日志,得出结论在发送的日志中可以找到丢失的这些告警,并确认这些告警的日志是在发送成功后记录的。

发送没找到问题,开始接收的问题,接收是单线程接收第接收一条都会顺序的记数,发现日志中这些告警记数都是连续的。接收的程序也分析了是监听式的接收,没发现存在问题,

最后分析MQ,因为我们用的是非持久的消息,对MQ的错误日志进行了分析,在丢告警的时间点均未发现错误,是主检查了系统的错误日志和队列管理器的日志。

还有一个需要补充,从目前发生两次的情况来看都有一个共同的特点,突然间告警量增大,一次是一个小时总共处理了700多条,但在丢告警的点持续时间33秒,发送的日志中查以查到近300条告警,并丢了其中的242条。一次是一小时共处理9000多条,在丢告警的1分32秒里处理了近3000条,丢了2457条。

1,现在想咨询下各们大侠,有没有人遇到过这种问题,有什么好的定位问题的思路?

2,WMQ的死信队列是不是只对持久的消息才有用?因为我让两个现场定义了死信队列,但其中一个发生了丢告警,但死信队列里面没有消息,难道真的可以放弃MQ的问题了吗?还是死信队列了解的不够清楚。

 

加载中
0
w
wangchunsheng
最后定位了这个问题,通过观察和对比发现在告警风暴出现时队列出现堆积,接收程序处理出现延时,最大延时在2-3分钟,最后对比接收的最后一条消息和丢失的最后一条消息,发现接收的时延都在大约30秒的地方,如以我们判断是不是可能有过期时间,最后发现接收的程序是使用了过期时间这种设置,经过测试我们也发现,设置了过期时间的消息会一直在队列里面,直到有程序GET消息时WMQ会检查过期,将过期的消息删掉。
返回顶部
顶部