camel jms没有从IBM MQ获取消息
问题描述:
我有几个骆驼微服务部署到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>
路由启动,但不拉的消息离开队列。
答
在将消息发送到队列之前,我通过执行<convertBodyTo type="String" /
>来解决截断问题。我怀疑这是因为该消息是一个UTF-8 ecoded xml消息。
我发现放入队列的消息正在被截断。这会导致听众失败。我不知道为什么消息被截断。使用ActiveMQ时它工作正常。 –
maximumActiveSessionPerConnection = 1似乎很低。你能尝试一个更高的价值,比如20吗?关于截断的消息:我记得一些WMQ工具只显示消息截断。这可能是误导。 –
谢谢塞巴斯蒂安。在将消息发送到队列之前,我通过执行来解决截断问题。我怀疑这是因为该消息是一个UTF-8 ecoded xml消息。奇怪的是,我使用ActiveMQ时不必这样做 –