저는 스프링 통합을 사용하여 활성 mq의 다른 쪽 끝에서 서비스를 호출합니다. 내가 발견 한 것은이 config로 소비자가 결코 가까운 활성 MQ에서 일치 요청을 잡기 위해 만든 것입니다스프링 통합을 사용하여 jms 소비자를 닫는 올바른 방법은 무엇입니까?
<bean id="jmsConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg>
<bean class="org.apache.activemq.ActiveMQConnectionFactory"
p:brokerURL="${risk.approval.queue.broker}"
p:userName="${risk.approval.queue.username}"
p:password="${risk.approval.queue.password}"
/>
</constructor-arg>
<property name="reconnectOnException" value="true"/>
<property name="sessionCacheSize" value="100"/>
</bean>
<!-- create and close a connection to prepopulate the pool -->
<bean factory-bean="jmsConnectionFactory" factory-method="createConnection" class="javax.jms.Connection"
init-method="close" />
<integration:channel id="riskApprovalRequestChannel"/>
<integration:channel id="riskApprovalResponseChannel"/>
<jms:outbound-gateway id="riskApprovalServiceGateway"
request-destination-name="${risk.approval.queue.request}"
reply-destination-name="${risk.approval.queue.response}"
request-channel="riskApprovalRequestChannel"
reply-channel="riskApprovalResponseChannel"
connection-factory="jmsConnectionFactory"
receive-timeout="5000"/>
<integration:gateway id="riskApprovalService" service-interface="com.my.super.ServiceInterface"
default-request-channel="riskApprovalRequestChannel"
default-reply-channel="riskApprovalResponseChannel"/>
:처럼 내 설정 보인다. 모든 요청은 소비자 수를 증가시킵니다.
은 내가 CachingConnectionFactory에
<property name="cacheConsumers" value="false" />
을 추가하여 이런 일이 발생 중지 할 수 있습니다. 그러나 CachingConnectionFactory를위한 자바 문서에 따라
: 영구 가입자 만 세션 핸들의 논리적 폐쇄 될 때까지 캐시됩니다 가참고.
이는 세션이 절대로 닫히지 않는다고 제안합니다.
이것은 나쁜 것입니까? 소비자가 쌓이는 것을 막을 수있는 더 좋은 방법이 있습니까?
건배, 피터 당신이 당신의 공장 콩에 초기화-방법이 필요하지 않습니다,
좋은 정보 주셔서 감사합니다. 소비자를 닫는 이유는 모두 상관 ID 선택자가 있기 때문에 결코 재사용 할 수 없다는 것입니다. 다른 소비자가 없다는 것을 감안할 때 제안한대로 SingleConnectionFactory로 전환 할 것입니다. –
그러나 세션 및 제작자의 캐싱도 손실됩니다. cacheConsumers = false 인 캐싱 연결 팩토리를 사용하여 실제로 올바른 작업을 수행하고있었습니다. 그렇게하면 두 세계의 장점을 모두 누릴 수 있습니다. –