Apache Camel简介以及使用场景

  • 我们要解决的问题以及解决方案
    • 我们要解决的问题
    • EAI的常用解决方案
      • SOA架构模型
      • ESB企业服务总线
    • 如何实现ESB
  • 为什么使用Camel
  • Camel可以做什么
    • Apache Camel简介
    • Camel的应用场景
  • Camel的核心要素
    • Endpoint
    • Exchange
    • Processor
    • Routing
    • Service
    • CamelContext上下文

我们要解决的问题以及解决方案

我们要解决的问题

  1. 完成组织内外的各种异构系统、应用、数据源之间共享和交换信息。
  2. 优化现有结构,使整个系统易于拓展和维护。
  3. 保证多个系统各自独立互不干扰。

总结发现我们实际要解决的问题是:企业应用集成(Enterprise Application Integration,EAI) 是完成在组织内、外的各种异构系统,应用和数据源之间共享和交换信息和协作的途径,方法学,标准和技术。

EAI的常用解决方案

SOA架构模型


SOA(Service Oriented Architecture) 中文释义为 “面向服务的架构”它是一种设计理念,其中包含多个服务, 服务之间通过相互依赖最终提供一系列完整的功能。各个服务通常以独立的形式部署运行,服务之间通过网络进行调用。要求各个服务遵循统一的规范和契约。

ESB企业服务总线


ESB(Enterprise Service Bus,即企业服务总线) 就是一根管道,用来连接各个服务节点。ESB的存在是为了集成基于不同协议的不同服务,ESB 做了消息的转化、解释以及路由的工作,以此来让不同的服务互联互通

如何实现ESB


当前实现ESB比较成熟的模型为EIP(Enterprise Integration Patterns)1。他的包含如下规范:

  • 集成方式(Integration Styles):EIP规定所有集成模式要基于消息传送模式。
  • 通道模式(Channel Patterns):消息通过通道进行传递。
  • 消息体模式(Message Construction Patterns):描述了在消息系统中交互的消息的规范。
  • 路由模式(Routing Patterns):消息如何从发送者分发到正确的接收者,中间一般不进行修改。
  • 转换模式(Transformation Patterns):将消息体的内容修改为接收者可以理解的结构,中间可能要对数据进行修改或者筛选。
  • 终端模式(Endpoint Patterns):生成或者接收消息的客户。
  • 系统管理模式(System Management Patterns):提供监控整个系统状态的工具,包括错误处理,压力测试或者监控系统变化。

为什么使用Camel

当前热门的EIP集成框架分别有:Spring Integration、Mule ESB、Apache Camel。接下来分别对三个框架进行分析(打分为博主的评估,仅供参考):

Spring Integration只提供了非常基础的支持,如文件,FTP,JMS,TCP,HTTP或Web服务。集成是通过编写大量的XML代码(没有一个真正的DSL)实现的。使用它,寓意着大量的XML编写工作

Mule ESB不是仅仅一个集成框架,而是一个包括一些额外功能的完整ESB,比Spring集成它更像是一个DSL。
因为是一个完整的ESB,所以集成逻辑会比较复杂

Apache Camel实现了你能想到的几乎每一个技术,提供很多组件,同时你可以很容易的自定义组件。而且Camel和Spring的集成很完善。Camel可以实现用到才依赖,不用不依赖。

Camel可以做什么

Apache Camel简介

Apache camel 是一个基于EIP的开源框架。实现了EIP定义的一些不同应用系统之间的消息传输模型,包括常见的Point2Point、Pub/Sub模型。

Camel的消息传递系统(Message System)2:

  • 终端(Message Endpoint):可以是异构的业务系统,都需要提供Endpoint实现集成。
  • 通道(Message Channel):两个应用之间进行信息通讯的通道。
  • 消息(Message):Endpoint之间交互的标准化单位。
  • 路由(Message Router):根据一定的条件,将消息传递给不同的过滤器以实现对单个处理步骤的解耦。
  • 转换器(Message Translator):消息在传输过程中的转换和数据映射,包括报文格式转换和内容转换映射。
  • 管道和过滤器(Pipes & Filters):在保持独立性和灵活性的基础上,对复杂的消息进行处理。

Camel的应用场景

  • 消息汇聚:比如将来自不同服务器的数据,有ActiveMQ、RabbitMQ、WebService等的数据合成报表。
  • 消息分发:将消息从消息生产者转发给消息接收者,分发方式分为两种:顺序分发&并行分发。
from("amqp:queue:order")
.to("uri:validateBean", "uri:handleBean", "uri:emailBean");from("amqp:queue:order")
.multicast()
.to("uri:validateBean", "uri:handleBean", "uri:emailBean");
  • 消息转换:将消息内容进行转换,比如xml转为json格式。
from("amqp:queue:order")
.process(new XmlToJsonProcessor())
.to("bean:orderHandler");
  • 规则引擎:可以使用Spring XML配置或DSL来定义route。同时camel提供了大量内置Processor,用于逻辑运算、过滤等,这样更容易灵活的管理route。
<route><from uri="amqp:queue:order"/><multicast><to uri="uri:validateBean"/><to uri="uri:handleBean"/><to uri="uri:emailBean"/></multicast>
</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");

Camel的核心要素


Camel有以下五要素:3

  • Endpoint:用于收发消息。
  • Exchange:消息本体。
  • Processor:消息处理器。
  • Routing:路由规则。
  • Service:Camel基础概念。

Endpoint

  • Endpoint是Camel与其他系统进行通信的设定点。

  • Camel自身提供了广泛的通信协议支持,例如:RPC协议、HTTP协议、FTP协议……

  • Camel中的Endpoint使用URI描述对目标系统的通信。

  • 对Endpoint实例的创建通过对Camel中org.apche.camel.Component接口的实现来实现的。

  • Camel通过Plug方式提供对各种协议的Endpoint支持,如果需要使用某种Endpoint,需要引入响应的plug。例如要使用Camel对Netty4-Endpoint的支持,要引入camel-netty4的依赖包。

Exchange

  • Properties:Exchange对象贯穿整个路由执行过程中的控制端点、处理器甚至还有表达式、路由条件判断。为了让这些元素能够共享一些开发人员自定义的参数配置信息,Exchange以K-V结构提供了这样的参数配置信息存储方式。

  • Patterns:Exchange中的pattern属性非常重要,它的全称是:ExchangePattern(交换器工作模式)。其实现是一个枚举类型:org.apache.camel.ExchangePattern。可以使用的值包括:InOnly, RobustInOnly, InOut, InOptionalOut, OutOnly, RobustOutOnly, OutIn, OutOptionalIn。从Camel官方已公布的文档来看,这个属性描述了Exchange中消息的传播方式。

  • Message IN/OUT:当Endpoint和Processor、Processor和Processor间的Message在Exchange中传递时,Exchange会自动将上一个元素的输出作为这个元素的输入使用。

Processor

Processor用于接受从Endpoint、Routing或者另一个Processor的Exchange中传来的消息,并进行处理。
Camel核心包和各个Plugin组件都提供了很多Processor的实现,开发人员也可以通过实现org.apache.camel.Processor接口自定义Processor。

// 一个自定义处理器的实现
public class OtherProcessor implements Processor {@Overridepublic void process(Exchange exchange) throws Exception {Message message = exchange.getIn();String body = message.getBody().toString();//===============// 您可以在这里进行数据格式转换// 并且将结果存储到out message中//===============// 存入到exchange的out区域if(exchange.getPattern() == ExchangePattern.InOut) {Message outMessage = exchange.getOut();outMessage.setBody(body + " || other out");}}
}

Routing

Routing用于处理Endpoint和Processor之间、Processor和Processor之间的路由跳转。
Camel中支持的路由规则非常丰富,包括基于内容、接收者列表、循环动态路由等。

Service

在Apache Camel中有一个比Endpoint、Component、CamelContext等元素更基础的概念元素:Service。
包括Endpoint、Component、CamelContext等元素在内的大多数工作在Camel中的元素,都是一个一个的Service。
Camel应用程序中的每一个Service都是独立运行的,各个Service的关联衔接通过CamelContext上下文对象完成。每一个Service通过调用start()方法被激活并参与到Camel应用程序的工作中,直到它的stop()方法被调用。也就是说,每个Service都有独立的生命周期。

CamelContext上下文

CamelContext横跨了Camel服务的整个生命周期,并且为Camel服务的工作环境提供支撑。


  1. 企业集成模式 ↩︎

  2. 消息传递系统 ↩︎

  3. Camel核心要素 ↩︎

Apache Camel简介以及使用场景相关推荐

  1. Apache Camel简介与入门

    Apache Camel 是一个基于知名的企业应用模式(Enterprise Integration Patterns)多功能的整合框架. StackOverflow上有很多学习Apache Came ...

  2. Apache Camel简介

    Apache Camel是著名的企业集成模式的开源实现. Camel是一个路由和中介引擎,可以帮助开发人员以各种领域特定语言(DSL)(例如Java,Spring / XML,scala等)创建路由和 ...

  3. apache camel_Apache Camel简介

    apache camel Apache Camel是著名的企业集成模式的开源实现. Camel是一个路由和中介引擎,可帮助开发人员以各种特定于域的语言(DSL)(例如Java,Spring / XML ...

  4. Apache Camel教程– EIP,路由,组件,测试和其他概念的简介

    公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 但是,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持. 企业集成模式(EI ...

  5. apache camel 相关配置_Apache Camel简介与入门-java

    编辑推荐: 本文来自于csdn, 文章使用一个实例来简单的介绍一下Apache Camel,详细请看下文. StackOverflow上有很多学习Apache Camel的资源,而这里仅仅是使用一个实 ...

  6. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建

    为什么80%的码农都做不了架构师?>>>    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 问题导读: 1.zookeeper在kafka的作用是什么? 2. ...

  7. apache camel_学习Apache Camel –实时索引推文

    apache camel 在大多数软件开发项目中,有一点需要使应用程序开始与其他应用程序或第三方组件通信. 无论是发送电子邮件通知,调用外部api,写入文件还是将数据从一个地方迁移到另一个地方,您都可 ...

  8. apache camel_轻量级的开源集成:Apache Camel还是Spring集成?

    apache camel 首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成 ...

  9. apache camel_发掘Apache Camel的力量

    apache camel 最近几年,ESB软件越来越受欢迎. 如果大多数人通常知道什么是ESB,那么他们很少会清楚地了解这种体系结构的不同组件的确切作用. 例如,Apache ServiceMix由三 ...

最新文章

  1. Chapter12:动态内存
  2. ASP.NET基础教程-DataView对象的属性、方法、枚举成员
  3. XNA游戏:软键盘弹窗输入
  4. android 中测量高度和宽度,android获得屏幕高度和宽度(display中getSize(Point)方法使用)...
  5. java reader utf-8_解決BufferedReader读取UTF-8文件中文乱码(转)
  6. python逐个读取字符_玩转python之字符串逐个字符或逐词反转
  7. VMware Pro 14.1.2 官方正式版及激活密钥
  8. 解决:安装R包时,经常提示“package ‘readr’ is not available (for R version 3.5.1)”的问题
  9. linux内核维护者,Linux 内核维护者封杀明尼苏达大学(转载) - 优秀的Free OS(Linux)版 - 北大未名BBS...
  10. Go语言实现大数开方程序
  11. github-新建文件夹
  12. 三款好用的前端代码编辑器推荐
  13. ug链轮设计软件_教你怎么用UG做链轮教程【UG爱好者首发】
  14. 阿里飞天分布式操作系统
  15. pycharm提示无法加载文件 C:\Users\admin\Desktop\pythonLX\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本
  16. 从CPU架构--x86架构和arm架构处理器--功耗
  17. 手机如何从网页完美的跳转到应用程序
  18. 韦东山嵌入式第一期学习笔记DAY_4——8_3编写第1个程序点亮LED
  19. python调用大漠写辅助_Python调用大漠插件
  20. 西南交通大学2017年计算机复试笔试题(数据库)

热门文章

  1. 【数理逻辑】命题逻辑 ( 命题逻辑推理正确性判定 | 形式结构是永真式 - 等值演算 | 从前提推演结论 - 逻辑推理 )
  2. linux磁盘分区表 清理,linux 磁盘分区表
  3. 科研小白成长记31——顶会到此一游
  4. 2022年陕西高级工程师职称评审流程是什么呢?甘建二
  5. 亚马逊常用API接口,亚马逊国际获得AMAZON商品详情 API 返回值说明
  6. ADI ADAU1701,ADAU1452,ADAU1938
  7. mongodb不等于某个值_mongodb查询的语法(大于,小于,大于或等于,小于或等于等等)...
  8. 用vegas制作美美哒写真相册——教程
  9. java8Stream流的使用2--终止操作(分组,分区)
  10. illustrator插件开发-AI插件-aip格式-第一章 第二小节 入口点函数