JMS(Jboss Messaging)的一点使用心得(十六)复数JMS Server监听-JBoss Remoting里存在的问题

6 篇文章 0 订阅

最近做了一个项目,要求一个JMS客户端监听复数台JMS Server,结果在测试时发生了问题。

各机器如下:

JMS Client,简称C

JMS Server1:简称S1

JMS Server2:简称S2

 

我们发现如果拔掉S1和C之间的网线,结果C和S2之间的连接也断掉了!郁闷啊!~!@#¥%

 

郁闷中调查了很久,修改了JBOSS的配置,不行!把我们的程序简化,不加任何处理,直接监听JMS,不行!把Spring去掉,直接用代码写监听程序,不行!把Connection中的Security部分去掉,还是不行……

 

没办法,只好上绝招了,就是,用Debug跟踪代码了,下载了JBOSS的Messaging和Remoting部分的代码,一步一步的跟踪下去,终于找到了问题。

 

JMS监听是常连接,为了节约Connection资源,所以做了死活管理。JMS Client端会定期去Ping JMS Server。这个定时器是一个Timer;如果一个定时器发现自己所Ping的Server没有应答,就会把自己关闭。

 

在org.jboss.remoting.LeasePinger里,大家可以看到相关代码!

 

这段代码没什么问题,但是问题在于这个Timer是静态的。

 

也就是说,如果这个Timer停止了,那么所有的Ping都没有了。结果就如下:

1.C和S1之间网络故障

2.C停止执行Ping命令的Timer

3.S2收不到C的Ping,就认为C已经停止了对它的监听,回收了和C之间的Connection

4.C不知道发生了问题,还在傻傻的等待S2给它发消息

......

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值