我遇到ActiveMQ和Spring的CachingConnectionFactory
問題。我將它們設置是這樣的:ActiveMQ和CachingConnectionFactory的Autoreconnect問題
<!-- A connection to ActiveMQ -->
<bean id="myConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${jms.url}"/>
<property name="userName" value="${jms.username}"/>
<property name="password" value="${jms.password}"/>
</bean>
<!-- A cached connection to wrap the ActiveMQ connection -->
<bean id="myCachedConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="myConnectionFactory"/>
<property name="sessionCacheSize" value="10"/>
<property name="reconnectOnException" value="true"/>
</bean>
<!-- A destination in ActiveMQ -->
<bean id="myDestination"
class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="${jms.queue}" />
</bean>
<!-- A JmsTemplate instance that uses the cached connection and destination -->
<bean id="myProducerTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="myCachedConnectionFactory"/>
<property name="defaultDestination" ref="myDestination"/>
</bean>
jms.url
使用故障轉移運輸:
failover:(tcp://firstbox:6166,tcp://secondbox:6166)?timeout=3000
我遇到的問題是,如果一個箱出現故障,我們應該開始發送消息另一個,但它似乎仍然使用舊的連接(每次發送超時)。如果我重新啓動程序,它會再次連接,一切正常。
我的理解是,ActiveMQConnectionFactory
應該自行修復(重新連接到一個新盒子),並且JmsTemplate
應該每次都請求一個新的連接,以便應該沒問題。我想知道CachingConnectionFactory
是否可能做壞事(緩存與舊服務器對話的製作人?)。
我是否錯過了我需要做的事情?我的設置看起來很正常,但我找不到任何其他人有這個問題。