【问题标题】:Autoreconnect problem with ActiveMQ and CachingConnectionFactoryActiveMQ 和 CachingConnectionFactory 的自动重新连接问题
【发布时间】:2011-08-20 11:21:02
【问题描述】:

我遇到了 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>

jms.url 正在使用故障转移传输:

failover:(tcp://firstbox:6166,tcp://secondbox:6166)?timeout=3000

我遇到的问题是,如果一个盒子出现故障,我们应该开始在另一个盒子上发送消息,但它似乎仍在使用旧连接(每次发送超时)。如果我重新启动程序,它将再次连接并且一切正常。

我的理解是ActiveMQConnectionFactory 应该自行修复(重新连接到新盒子),JmsTemplate 应该每次都请求新连接,所以应该没问题。我想知道CachingConnectionFactory 是否会做坏事(缓存与旧服务器对话的生产者?)。

我错过了我需要在这里做的事情吗?我的设置看起来很正常,但我找不到其他人有这个问题。

【问题讨论】:

    标签: java spring activemq


    【解决方案1】:

    仅供参考,我刚刚在两个本地 AMQ 代理之间测试了这个场景(对生产者/消费者连接使用 CachingConnectionFactory),并且故障转移工作正常......

    话虽如此...我在使用轮询消费者模式时看到其他消费者连接问题...必须手动关闭连接或其他东西。

    【讨论】:

      【解决方案2】:

      我遇到的问题是 ActiveMQ 在重新连接时没有告诉CachingConnectionFactory,所以缓存的连接仍在使用中。我用 ActiveMQ 的 PooledConnectionFactory 替换它,问题就消失了。

      【讨论】:

        猜你喜欢
        • 2011-11-23
        • 2011-08-03
        • 2016-01-29
        • 2017-09-15
        • 2018-02-03
        • 1970-01-01
        • 2020-04-06
        • 2011-08-21
        • 2015-02-10
        相关资源
        最近更新 更多