2017-05-05 8 views
1

tomcat에 개별 war 파일로 배포 된 여러 개의 낙타 마이크로 서비스가 있습니다. 각 전쟁 파일에는 고유 한 낙타 경로가 있습니다. 서비스 중 하나는 비누 요청을 받아들이고 IBM MQ의 대기열에 메시지를 넣습니다. 이것은 문제없이 작동합니다. 이러한 메시지를받는 서비스는 메시지를 대기열 밖으로 끌어 와서 전달하지 않습니다. 각 전쟁 파일의 IBM MQ 구성으로 다음있다camel jms가 IBM MQ로부터 메시지를받지 못합니다.

<!-- Configure IBM MQ connection factory --> 
    <bean id="ibmMqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory"> 
     <property name="transportType" value="1"/> 
     <property name="hostName"  value="${ibm.mq.host}"/> 
     <property name="port"   value="${ibm.mq.port}"/> 
     <property name="channel"  value="${ibm.mq.channel}"/> 
     <property name="queueManager" value="${ibm.qm.name}"/> 
    </bean> 

    <bean id="ibmMqPooledConnectionFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory" init-method="start" destroy-method="stop"> 
     <property name="connectionFactory"     ref="ibmMqConnectionFactory"/> 
     <property name="maxConnections"     value="8"/> 
     <property name="maximumActiveSessionPerConnection" value="1"/> 
     <property name="expiryTimeout"      value="30000"/> 
     <property name="idleTimeout"      value="30000"/> 
     <property name="blockIfSessionPoolIsFull"   value="false"/> 
    </bean> 

    <bean id="ibmMqConnectionFactorySecured" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"> 
     <property name="targetConnectionFactory" ref="ibmMqPooledConnectionFactory"/> 
     <property name="username"    value="${ibm.mq.username}"/> 
     <property name="password"    value="${ibm.mq.password}"/> 
    </bean> 

    <bean id="ibmMqTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager"> 
     <property name="connectionFactory" ref="ibmMqConnectionFactorySecured" /> 
    </bean> 

    <bean id="ibmMqJmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
     <property name="connectionFactory" ref="ibmMqConnectionFactorySecured"/> 
     <property name="concurrentConsumers" value="4"/> 
     <property name="transacted"   value="true"/> 
     <property name="transactionManager" ref="ibmMqTransactionManager" /> 
     <property name="cacheLevelName"  value="CACHE_NONE" /> 
    </bean> 

    <bean id="ibmMq" class="org.apache.camel.component.jms.JmsComponent"> 
     <property name="configuration" ref="ibmMqJmsConfig"/> 
    </bean> 

큐의 메시지를 가져옵니다 낙타 경로의 하나의 예는

<route id="cancellation-service-route" errorHandlerRef="deadLetterErrorHandler"> 
    <from uri="{{cancellationService.queue}}"/> 
    <unmarshal ref="requestCancellationRequest"/> 
    <to uri="bean:cancellationTranslator?method=transform"/> 
    ... 
</route> 

같은 경로의 시작을 보이지만 메시지를 가져 오기하지 않습니다 대기열에서.

+0

대기열에 들어가는 메시지가 잘 리면서 발견되었습니다. 그 때문에 청취자가 실패하게됩니다. 메시지가 잘리는 이유를 모르겠습니다. ActiveMQ를 사용할 때 제대로 작동합니다. –

+0

maximumActiveSessionPerConnection = 1이 낮은 것 같습니다. 20과 같이 더 높은 가치를 시험해 볼 수 있습니까? 잘린 메시지 : 일부 WMQ 도구는 잘린 메시지 만 표시한다는 것을 기억합니다. 오도 ​​된 수 있습니다. –

+0

감사합니다. Sebastian. 큐에 메시지를 보내기 전에 을 수행하여 잘림 문제를 해결했습니다. 나는 그것이 메시지가 UTF-8 ecoded xml 메시지이기 때문에 그것이 의심 스럽다. 이상하지만 ActiveMQ를 사용할 때이 작업을 수행 할 필요가 없었습니다. –

답변

1

메시지를 대기열로 보내기 전에 <convertBodyTo type="String" />을 수행하여 잘림 문제를 해결했습니다. 나는 그것이 메시지가 UTF-8 ecoded xml 메시지이기 때문에 그것이 의심 스럽다.