定义:轻量级的集成框架,基于EIP(企业整合模式)blabla...
什么时候使用:
多个应用程序使用不同的协议和技术集成,无论使用什么协议,无论使用什么技术,无论特定领域的语言。
主要应用场景:
1,消息汇聚,
比如你有来自不同服务器的消息,有ActiveMQ,RabbitMQ,WebService等,你想把它们都存储到日志文件中
new RouteBuilder() {
@Override
public void configure() throws Exception {
from("amqp:queue:incoming").to("log:com.mycompany.log?level=DEBUG");
from("rabbitmq://localhost/A/routingKey=B").to("log:com.mycompany.log?level=DEBUG");
from("jetty:http://localhost:8080/myapp/myservice").to("log:com.mycompany.log?level=DEBUG");
}
}
from表示从这个endpoing取消息,to表示将消息发往这个endpoint,endpoint是消息地址,包含协议类型以及url。
2.消息分发,
分为两种,顺序分发和并行分发。
顺序分发:先到第一个endpoint,处理完再分发到第二个endpoint......如果第一个endpoint出错,那么消息不会下传。
from("amqp:queue:order").to("uri:validateBean", "uri:handleBean", "uri:emailBean");
这个规则是从order队列中取订单信息,然后依次验证订单,处理订单,并发送邮件通知用户。任何一个步骤出错,下一个步骤将不回执行。
并行分发:得到消息后同时分发到不同的endpoint,没有先后顺序之分,各个endpoint也是独立处理消息的。如:
from("amqp:queue:order").multicast().to("uri:validateBean", "uri:handleBean", "uri:emailBean");
同时发送到to的所有endpoint。
3,消息转换,如xml转换json
from("amqp:queue:order").process(new XmlToJsonProcessor()).to("bean:orderHandler");
XmlToJsonProcessor是一个自定义的类,继承org.apache.camel.Processor,用来将xml转换为json。
4, 规则引擎
使用spring xml配置route,无需修改代码,就能修改业务逻辑,解耦
如可以将from("amqp:queue:order").multicast().to("uri:validateBean", "uri:handleBean", "uri:emailBean");可以改成
<route>
<from uri="amqp:queue:order"/>
<multicast>
<to uri="uri:validateBean"/>
<to uri="uri:handleBean"/>
<to uri="uri:emailBean"/>
</multicast>
</route>
同时camel还内置大量的processor,用于逻辑运算,过滤,这样就容易灵活去route
from("amqp:queue:order").filter(header("foo").isEqualTo("bar")).choice()
.when(xpath("/person/city = 'London'"))
.to("file:target/messages/uk")
.otherwise()
.to("file:target/messages/others");
这条规则相对订单进行过滤,只处理“bar”的订单,然后根据城市讲订单给不同的endpoint