[java]终于搞定了ActiveMQ


这个鸟东西文档太少了,在多线程时经常报错,发送时可能报错,接收时也报错,在别人电脑上不报错,在我电脑上就容易出错。而且一出SocketException就完蛋。自带的线程池只用一个ActiveMQConnection, 检测到网络错误后,直接关闭连接,而外部的线程池包装没有对连接检查是否closed就返回,造成一出错消息就中断。

开始的想法是我自己加上关闭检查,在连接池中检查如果出错就返回新建的连接。这样MessageListener也要重新注册,奇怪的是,Session中注册的异常处理器居然实效。。。。

后来ActiveMQ论坛上的高手告诉我:要用自动重连功能:reliable:tcp://host:port作为URL, faint, 看文档好像是在多个url之间切换用的。

在老外答复之前,试用了他们的4.0M2版,这个版本改动比较大,碰到以下问题:
1. spring支持没有了。自己启动如下:
   broker = org.activemq.broker.BrokerFactory.createBroker(new URI(
     "broker:(tcp://localhost:61616)?persistent=false"));
   broker.start();
2. URL规则变化,见上。
3. 在多线程时错误不同,在关闭PooledSession时报错:pool closed. 
  经过检查,发现PooledConnection.close()方法画蛇添足把共享的cache给关闭了。注释掉后正常。
4. 自动重连url: failover:tcp://host:port

4.0版在启动后速度很快,以前好像有个DNS解析时间没有了。

   

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告