복붙노트

[SPRING] ActiveMQ 및 CachingConnectionFactory의 자동 연결 문제

SPRING

ActiveMQ 및 CachingConnectionFactory의 자동 연결 문제

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이 매번 새 연결을 요청해야하므로 OK 여야합니다. 나는 CachingConnectionFactory가 뭔가 나쁜 일을하고 있는지 궁금해한다. (예전 서버와 대화하는 제작자를 캐싱하는 것)?

내가 여기서해야 할 일이 없어 졌니? 내 설정이 정상적으로 보였지만이 문제가있는 다른 사람을 찾을 수 없습니다.

해결법

  1. ==============================

    1.내가 가지고있는 문제는 ActiveMQ가 다시 연결될 때 CachingConnectionFactory를 말하지 않아서 캐시 된 연결이 여전히 사용되고 있다는 것입니다. 나는 그것을 ActiveMQ의 PooledConnectionFactory로 바꾸었고 문제는 사라졌다.

    내가 가지고있는 문제는 ActiveMQ가 다시 연결될 때 CachingConnectionFactory를 말하지 않아서 캐시 된 연결이 여전히 사용되고 있다는 것입니다. 나는 그것을 ActiveMQ의 PooledConnectionFactory로 바꾸었고 문제는 사라졌다.

  2. ==============================

    2.참고로 두 개의 로컬 AMQ 중개자와 장애 조치 (failover) 사이에서이 시나리오 (두 생산자 / 소비자 연결 모두에 대해 CachingConnectionFactory 사용)를 테스트 한 결과 ...

    참고로 두 개의 로컬 AMQ 중개자와 장애 조치 (failover) 사이에서이 시나리오 (두 생산자 / 소비자 연결 모두에 대해 CachingConnectionFactory 사용)를 테스트 한 결과 ...

    그 말은 ... 나는 다른 컨슈머 연결 문제가 폴링 소비자 패턴을 사용할 때 볼 수 있습니다 ... 수동으로 연결 또는 뭔가를 닫아야합니다.

  3. from https://stackoverflow.com/questions/5916638/autoreconnect-problem-with-activemq-and-cachingconnectionfactory by cc-by-sa and MIT license