开始的想法是我自己加上关闭检查,在连接池中检查如果出错就返回新建的连接。这样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解析时间没有了。