2017-05-05 114 views
1

我有幾個駱駝微服務部署到tomcat作爲單獨的war文件。每個戰爭文件都包含一條獨特的駱駝路線。其中一個服務接受soap請求並將消息放入IBM MQ上的隊列中。這工作沒有問題。獲取這些消息的服務似乎不會將消息從隊列中拉出並轉發。每個WAR文件有以下爲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

謝謝塞巴斯蒂安。在將消息發送到隊列之前,我通過執行來解決截斷問題。我懷疑這是因爲該消息是一個UTF-8 ecoded xml消息。奇怪的是,我使用ActiveMQ時不必這樣做 –

回答

1

在將消息發送到隊列之前,我通過執行<convertBodyTo type="String" />來解決截斷問題。我懷疑這是因爲該消息是一個UTF-8 ecoded xml消息。