Rei*_*ica 6 java spring activemq-classic
我遇到了ActiveMQ和Spring的问题CachingConnectionFactory
.我把它们设置成这样:
<!-- 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>
Run Code Online (Sandbox Code Playgroud)
jms.url
正在使用故障转移传输:
failover:(tcp://firstbox:6166,tcp://secondbox:6166)?timeout=3000
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果一个盒子出现故障,我们应该开始在另一个盒子上发送消息,但它似乎仍在使用旧连接(每次发送超时).如果我重新启动程序,它将再次连接,一切正常.
我的理解是ActiveMQConnectionFactory
应该自行修复(重新连接到一个新的盒子),并且JmsTemplate
应该每次都请求一个新的连接,所以这应该没问题.我想知道是否CachingConnectionFactory
可能做坏事(缓存与旧服务器通信的制作人?).
我错过了我需要做的事吗?我的设置似乎很正常,但我找不到其他人有这个问题.
我遇到的问题是ActiveMQ没有告诉它CachingConnectionFactory
何时重新连接,因此缓存的连接仍然被使用.我用ActiveMQ取而代之,PooledConnectionFactory
问题就消失了.
归档时间: |
|
查看次数: |
8188 次 |
最近记录: |