2017-05-05 20 views
1

私はいくつかのcamelマイクロサービスをtomcatに個別のwarファイルとして配備しています。各戦争ファイルにはユニークなラクダルートが含まれています。サービスの1つが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> 

キューのメッセージを引っ張るラクダルートの1つの例は、

<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メッセージであるためと思われます。

関連する問題