著名EIP实施框架Camel它起源于ActiveMQ的一些基于消息的集成需求。然后逐渐发展成为一个ActiveMQ的子项目,最后这一块的功能越来越完好。就成为了Apache的顶级项目。
所以,从一開始到如今。ActiveMQ与Camel这两个项目一直都是紧密联系的,能够很方便的整合使用:比方在ActiveMQ的配置文件里直接依照Spring的配置方式使用Camel来实现ActiveMQ与其它外部系统或中间件的集成。而ActiveMQ中的一些简单的集成功能也越来越倾向于直接去掉或者移植到Camel环境中去实现。
环境:ActiveMQ 5.9.0、RabbitMQ3.3.0、
一、ActiveMQ与ActiveMQ的集成实现一个简单的从一个Queue到还有一个Queue的消息转发。
1. 在activemq.xml中加一句:<import resource="camel.xml"/>
2. 加一个简单路由,从队列example.A转发消息到队列example.B,camel.xml的内容为:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" ://camel.apache.org/schema/spring/camel-spring.xsd ://www.springframework.org/schema/beans/spring-beans.xsd"> <camelContextxmlns="http://camel.apache.org/schema/spring"> <route> <description>Example Camel Route</description> <from uri="activemq:example.A"/> <to uri="activemq:example.B"/> </route> </camelContext> <beanclass="org.apache.activemq.camel.component.ActiveMQComponent" > <property> <beanclass="org.apache.activemq.ActiveMQConnectionFactory"> <propertyvalue="vm://localhost?create=true"/> <propertyvalue="${activemq.username}"/> <property value="${activemq.password}"/> </bean> </property> </bean> </beans>3. 启动ActiveMQ后,浏览器输入:8161/admin/queues.jsp。能够看到自己主动创建了一个队列example.A。而且加了一个消费者。
4. 点击Send To,发送一个消息到example.A,刷新页面,能够看到消息已经被转发:
二、ActiveMQ与RabbitMQ集成
具体的配置參数:
Ø 从RabbitMQ路由消息到ActiveMQ1. Camel里加入AMQP的路由例如以下:
<route> <from uri="rabbitmq://localhost/t?username=guest&password=guest&exchangeType=topic&autoDelete=false&queue=t"/> <to uri="activemq:example.fromRMQ"/> </route>2. 复制camel中的camel-rabbitmq-2.13.0.jar 和rabbitmq-java-client中的rabbitmq-client.jar到apache-activemq-5.9.0\lib\camel下。
3. 重新启动ActiveMQ,在rabbitmq的控制台能够看到自己主动创建的exchange为t。
4. 在rabbitmq控制台向t中发送消息,
5. 刷新ActiveMQ控制台能够看到消息已经从rabbitmq路由到activemq:
Ø 从ActiveMQ路由消息到Rabbitmq