복붙노트

[SPRING] WMQ 용 JMS 연결 풀 구성 (스프링) 구성 방법

SPRING

WMQ 용 JMS 연결 풀 구성 (스프링) 구성 방법

Websphere MQ 용 Spring / Camel에서 JMS 연결 풀을 구성하려고합니다. 봄부터 CachingConnectionFactory를 사용하려고하면 클래스 캐스팅 예외가 발생합니다. WMQ에서 풀을 찾을 수 없으며 누군가가 WMQ와 연결 풀링을했는데 어떤 예제도 찾지 못했습니다. ActiveMQ에는 많은 예제가 있습니다.

여기에 내가 지금까지 가지고있는 클래스 캐스트 예외가 생성됩니다.

<bean id="inCachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory" ref="inboundMqConnectionFactory1" />
    <property name="sessionCacheSize" value="5" />
</bean>

<bean id="inboundWebsphereMq1" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="inCachingConnectionFactory" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="transacted" value="true" />
    <property name="transactionManager" ref="txManager1" />
</bean>

<bean id="inboundMqConnectionFactory1" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="hostName" value="${isi.inbound.queue.host2}" />
    <property name="port" value="${isi.inbound.queue.port}" />
    <property name="queueManager" value="${isi.inbound.queue.queuemanager2}" />
    <property name="channel" value="${isi.inbound.queue.channel2}" />
    <property name="transportType" value="${isi.queue.transportType}" />
</bean>

내가 본 예외는 여기에있다.

복구하려고합니다. 원인 : com.sun.proxy. $ Proxy37을 com.ibm.mq.jms.MQQueueSession으로 형변환 할 수 없습니다.

해결법

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

    1.일반적으로 :

    일반적으로 :

    이제 다음과 같이 시도하십시오.

    <bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory"
      p:queueManager="${QM_NAME}"
      p:hostName="${QM_HOST_NAME}"
      p:port="${QM_HOST_PORT}"
      p:channel="${QM_CHANNEL}"
      p:clientID="${QM_CLIENT_ID}">
      <property name="transportType">
        <util:constant static-field="com.ibm.msg.client.wmq.WMQConstants.WMQ_CM_CLIENT" />
      </property>
    </bean>
    
    <bean id="userConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"
      p:targetConnectionFactory-ref="mqConnectionFactory"
      p:username="${QM_USERNAME}"
      p:password="${QM_PASSWORD}" />
    
    <!-- this will work -->
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"
      p:targetConnectionFactory-ref="userConnectionFactory"
      p:cacheConsumers="true"
      p:reconnectOnException="true" />
    

    물론 원하는 경우 소비자 대신 세션을 캐시 할 수 있습니다. 내 경험에 의하면 WMQ 세션 캐싱은 측정 가능한 성능 향상이지만 WMQ 시스템의 CPU 성능이나 실제 메시지 처리량에 제한이있는 경우에만 가능합니다. 두 상황 모두 대다수의 세계 응용 프로그램에서는 거의 발생하지 않습니다. 캐싱 소비자는 과도한 MQ OPEN 호출을 피하는데, 이는 WMQ에서 비용이 많이 드는 작업이므로 도움이됩니다.

    엄지 손가락의 규칙은 소비자 + 세션 캐싱입니다. 성능상의 이점은 연결 캐싱의 성능 이점의 1/2과 같고 하드웨어가 제한적이지 않은 한 일반적으로 일상적인 JEE 스택을 추구하지 않습니다.

    WMQ v7부터 비동기 소비자는 스프링 MC에 비해 문자 그대로 CPU 오버 헤드없이 매우 빠르며, 하드웨어 제한이있는 경우 메시지를 선호하는 방법입니다. 대부분의 시절에 나는 여전히 봄을 사용하고 있습니다.

    희망이 도움이됩니다.

  2. from https://stackoverflow.com/questions/23086014/how-to-configure-spring-jms-connection-pool-for-wmq by cc-by-sa and MIT license