往事如风
记录工作中的点点滴滴 留住那些淡淡的回忆
posts - 6,  comments - 3,  trackbacks - 0

最近在线上部署的ActiveMQ发生一次故障,因为一台ActiveMQ故障将前台的关键应用全部连接挂住,根本原因有两条:session的timeout设置不合理以及session池没有限制大小。这里说的不是这个问题,而是在后续设置client的timeout过程中,有同学发现AMQ有一个严重的bug,timeout根本不起作用!!!

调试代码发现:

fr.png

在Activemq的send response处理中,使用了一个BlockingQueue,在有timeout的方法里,使用了poll方法,这个方法的api说明中指出,当timeout发生时,这个方法返回null!!!

我们在看AMQ经过层层调用后,在ActiveMQConnection方法中如何处理这个返回值:

amc.png

对返回值为空的情况没有做任何处理,即使消息发送超时,amq也认为这个消息发送成功!估计这哥们理解poll在timeout的时候会抛出异常吧。

解决办法很简单,在response为空的时候,抛出JMSException,告知发生Timeout错误。

posted on 2010-07-14 19:17 井底青蛙,常望天空 阅读(169) 评论(0)  编辑  收藏 所属分类: ActiveMQjava

只有注册用户登录后才能发表评论。


网站导航:
 

<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜