我已经看了好几天了,但仍然没有取得成功。
我在服务器上安装并运行activeMQ。创建了一个名为“testUpdate”的队列。我在另一台服务器上也有另一个队列,让我们调用它“转发”,这是在IBM MQ(WMQ)上。
所以我们在ActiveMQ上有 testUpdate ,在WMQ上有前进。我希望将转发队列中的消息放入 testUpdate 队列中。尝试使用Camel进行此过程。
因此,ActiveMQ中的设置有一个XML(activemq.xml),我可以放置spring bean并配置进行路由。在这个xml中,我将http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd添加到xmlns,然后添加了
import resource =“camel.xml”
在这个新的xml中,我有以下内容:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<route>
<description>Example Camel Route</description>
<from uri="mqseries:forward"/>
<to uri="activemq:testUpdate"/>
</route>
</camelContext>
<bean id="mqseries" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="transportType" value="1"/>
<property name="hostName" value="172.00.12.21/>
<property name="port" value="xyza"/>
<property name="queueManager" value="manager"/>
<property name="channel" value="srvcChannel"/>
</bean>
<!--
Lets configure some Camel endpoints
http://camel.apache.org/components.html
-->
<!-- configure the camel activemq component to use the current broker -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" >
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://amq-broker?create=false"/>
<property name="userName" value="${activemq.username}"/>
<property name="password" value="${activemq.password}"/>
</bean>
</property>
</bean>
</beans>
我将jar文件com.ibm.mq.allclient.jar添加到ActiveMQ的lib文件夹中。运行程序时,我收到此异常: java.lang.ClassNotFoundException:javax.jms.JMSRuntimeException
听起来我错过了websphere jar文件?这是对的吗?
答案 0 :(得分:3)
我定期使用IBM MQ和ActiveMQ。下面的示例将向您展示一些示例配置选项。请确保将这些配置为您自己的用例。
//ActiveMQ connection factory
<bean id="activemq" 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="${activemq1.brokerUrl}" />
<property name="userName" value="${activemq1.username}" />
<property name="password" value="${activemq1.password}" />
<property name="redeliveryPolicy">
<bean class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="-1" />
</bean>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</property>
</bean>
//IBM MQ connection factory
<bean id="ibmmq" 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="${channel}" />
<property name="hostName" value="${hostname}" />
<property name="port" value="${port}" />
<property name="queueManager" value="${queueManager}" />
</bean>
</constructor-arg>
</bean>
</property>
</bean>
答案 1 :(得分:1)
您可以使用jms组件来使用来自IBM MQ的消息,并使用activemq组件将其发布到ActiveMQ
查看以下链接
http://camel.apache.org/jms.html http://camel.apache.org/activemq.html
谢谢, Gibu
答案 2 :(得分:0)
您可以使用用户骆驼额外组件https://github.com/camel-extra/camel-extra/blob/master/components/camel-wmq/README.md从wmq获取消息,而无需使用JMS包装,然后使用自定义骆驼组件https://camel.apache.org/components/latest/activemq-component.html将消息发送到ActiveMQ。另请参见类似的主题Apache Camel with IBM MQ。