我正在尝试编写一个简单的骆驼路线,以使用Apache Service Mix将IBM MQ与Active MQ集成在一起。成功安装捆绑软件后,由于某些原因,骆驼路由仍然无法使用来自IBM MQ的消息。
我已经在ServiceMix中部署了IBM MQ提供的OSGI捆绑软件。最初,JMS版本存在一些问题,因为开箱即用的服务组合提供的捆绑使用JMS 1.1,而IBM OSGI捆绑使用JMS 2.0。由于JMS 2.0向后兼容1.1版本,因此能够通过更新已部署捆绑软件中的导出和导入包来解决冲突。成功完成定制捆绑软件安装后,由于某种原因,骆驼路由仍然无法使用来自IBM MQ的消息。我在服务组合和IBM MQ端均未看到任何与连接相关的异常。使用类似的代码,我成功地能够在2个不同的Active MQ代理之间读取和写入消息。
<bean id="activemqjms"
class="org.apache.activemq.camel.component.ActiveMQComponent"
destroy-method="doStop">
<property name="configuration">
<bean class="org.apache.camel.component.jms.JmsConfiguration">
<property name="concurrentConsumers" value="1" />
<property name="maxConcurrentConsumers" value="1" />
<property name="acceptMessagesWhileStopping" value="true" />
<property name="acknowledgementModeName"
value="CLIENT_ACKNOWLEDGE" />
<property name="cacheLevelName" value="CACHE_CONSUMER" />
<property name="connectionFactory">
<bean class="org.apache.activemq.pool.PooledConnectionFactory"
init-method="start" destroy-method="stop">
<property name="maxConnections" value="1" />
<property name="MaximumActiveSessionPerConnection"
value="500" />
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${broker.url}" />
<property name="userName"
value="${broker.username}" />
<property name="password"
value="${broker.password}" />
<property name="redeliveryPolicy">
<bean class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="-1" />
</bean>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</property>
</bean>
<bean id="ibmmqjms"
class="org.apache.camel.component.jms.JmsComponent"
destroy-method="doStop">
<property name="concurrentConsumers" value="1" />
<property name="maxConcurrentConsumers" value="1" />
<property name="connectionFactory">
<bean
class="org.springframework.jms.connection.SingleConnectionFactory"
destroy-method="destroy">
<constructor-arg>
<bean class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="transportType" value="1" />
<property name="channel" value="CHANNELTEST" />
<property name="hostName" value="VALID HOSTNAME" />
<property name="port" value="1414" />
<property name="queueManager" value="TESTQUEUEMGR" />
</bean>
</constructor-arg>
</bean>
</property>
</bean>
<bean id="inMessageProcessor"
class="com.test.component.InMessageProcessor" />
<bean id="incomingRoute"
class="com.test.route.IncomingRoute">
<property name="externalInQueueName"
value="${external.queue.in.name}" />
<property name="internalInQueueName"
value="${internal.queue.in.name}" />
</bean>
<bean id="ougoingRoute"
class="com.test.route.OutgoingRoute">
<property name="externalOutQueueName"
value="${external.queue.out.name}" />
<property name="internalOutQueueName"
value="${internal.queue.out.name}" />
</bean>
<camel:camelContext id="queueConnector">
<camel:routeBuilder ref="incomingRoute" />
<camel:routeBuilder ref="ougoingRoute" />
</camel:camelContext>
我现在没有看到任何错误消息。