Apache Camel 概念及使用场景

原博客地址:http://www.cnblogs.com/zengbiaobiao2016/p/5480992.html


Apache Camel 是一个基于Enterprise Integration Pattern(企业整合模式,简称EIP)的开源框架。EIP定义了一些不同应用系统之间的消息传输模型,包括常见的Point-to-Point,Pub/Sub模型。更多关于EIP的信息,可以参见 这里
 
Apache Camel主要提供了以下功能:
1,实现了EIP的大部分模式,如果你要在不同的应用系统之间以不同的方式传递消息,那么你可以从Apache Camel中找到解决反感。
2,提供了大量Component(组件),每个组件都是一种消息中间件(或消息服务)的具体实现,每个消息中间件所用的协议都是不同的,因此,你可以通过多种不同的协议来完成消息传输。
3,允许用户定义灵活的路由规则,从这个角度来说,Apache Camel时一个规则引擎。
 
那么Apache Camel的应用场景有那些呢,这里列举一些:
 

1,消息汇聚,比如你有来自不同服务器的消息,有ActiveMQ,RabbitMQ,WebService等,你想把它们都存储到日志文件中,那么可以定义如下规则。
 
复制代码
1 new RouteBuilder() {
2     @Override
3     public void configure() throws Exception {
4         from("amqp:queue:incoming").to("log:com.mycompany.log?level=DEBUG");
5         from("rabbitmq://localhost/A/routingKey=B").to("log:com.mycompany.log?level=DEBUG");
6         from("jetty:http://localhost:8080/myapp/myservice").to("log:com.mycompany.log?level=DEBUG");
7     }
8 }
复制代码

 

from表示从这个endpoing取消息,to表示将消息发往这个endpoint,endpoint是消息地址,包含协议类型以及url。 

 
2,消息分发,分为两种,顺序分发和并行分发。顺序分发时,消息会先到到第一个endpoing,第一个endpoint处理完成后,再分发到下下个endpoint。如果第一个endpoing处理出现故障,那么消息不会被传到第二个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, Groovy这类DSL来定义route,这样无需修改代码,就能达到修改业务逻辑的目的。
例如上边的规则,from(“amqp:queue:order”).to(“uri:validateBean”, “uri:handleBean”, “uri:emailBean”);使用Spring Xml定义如下:
 
复制代码
<route>
        <from uri="amqp:queue:order"/>
        <multicast>
            <to uri="uri:validateBean"/>
            <to uri="uri:handleBean"/>
            <to uri="uri:emailBean"/>
        </multicast>
</route>
复制代码
 
如果需要在处理完订单后添加日志,可以改称如下规则
 
复制代码
<route>
        <from uri="amqp:queue:order"/>
        <multicast>
            <to uri="uri:validateBean"/>
            <to uri="uri:handleBean"/>
            <to uri="log:com.mycompany.log?level=INFO"/>
            <to uri="uri:emailBean"/>
        </multicast>
</route>
复制代码

 

另外camel提供了大量的内置Processor,用于逻辑运算,过滤等,这样更加容易定移除灵活的route,例如:
 
from("amqp:queue:order").filter(header("foo").isEqualTo("bar")).choice()
    .when(xpath("/person/city = &#39;London&#39;"))
        .to("file:target/messages/uk")
    .otherwise()
        .to("file:target/messages/others");

 

这条规则先对订单进行过滤,只处理header中foo的值为bar的订单,然后根据用户的城市进行将订单传给不同的endpoint。
 
 
Apache Camel的应用场景有很多,这里只是大致列举了几种。如果还不是很理解Camel的应用场景,你可以先到 Enterprise Integration Pattern(企业整合模式,简称EIP)中去找对应的scenario,点击每种scenario下的链接,就能找到Camel对应的实现。









  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Camel和JBang是两个不同的工具,但可以配合使用Apache Camel是一个源的集成框架,用于构建面向企业的集成应用程序,而JBang是一个基于Java的脚本引擎。 如果你想在使用Apache Camel时结合JBang进行脚本编写和执行,可以按照以下步骤操作: 1. 首先,确保你已经安装了Java和Apache Camel。你可以从官方网站下载和安装最新版本的Apache Camel。 2. 接下来,你需要安装JBang。JBang可以通过其官方网站或GitHub仓库进行下载和安装。 3. 安装完成后,你可以创建一个新的JBang脚本文件,用于编写和执行Apache Camel的集成路由。你可以使用任何文本编辑器打开该文件,并在其编写你的Camel路由逻辑。 4. 在脚本文件的开头,添加`#!/usr/bin/env jbang`这一行,以告诉系统使用JBang来执行该脚本。 5. 在脚本文件,导入所需的Apache Camel类和其他必要的依赖项。你可以使用JBang的内置依赖管理功能来自动下载和管理这些依赖项。 6. 编写你的Apache Camel路由逻辑。你可以使用Camel的Java DSL或XML DSL来定义和配置路由。在脚本,你可以使用Java代码来编写这些路由逻辑。 7. 最后,保存脚本文件,并在命令行执行它。你可以使用`jbang <脚本文件名>`命令来运行该脚本。 通过这种方式,你可以使用JBang来编写和执行Apache Camel的集成路由,从而实现各种企业集成场景的需求。注意,这只是一种使用JBang和Apache Camel的方法,你还可以根据自己的需求进行灵活调整和扩展。希望对你有所帮助!如果你有更多问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值