OSGi数据处理

Camel(01) - 简要介绍

2018-10-28  本文已影响99人  God_Moon

引言

最近实习中接触到的项目使用Apache Camel作为服务间的路由,深感Camel强大之处,于是决定深入学习Camel的原理及使用。
我在学习Camel的过程中主要以阅读Camel的官方文档以及《Camel in Action》书籍和编写Demo练习的方式。这一系列文章将围绕Camel的背景、作用、特色、组件等详细介绍Camel的原理和使用。

Apache Camel是一个功能强大的开源集成框架,基于已知的企业集成模式和强大的bean集成。Camel项目于2007年初启动,Camel的重点是简化集成。Camel框架的核心是路由引擎,或者更确切地说是一个路由引擎建造者。它允许自定义路由规则,从中决定来源接受消息并确定如何处理和发送这些消息到其他目的地。Camel吸引我的地方也正是其灵活的路由,再佐以可插拔的组件,使其可以在不同的应用中灵活的传递、转换和控制消息。

Camel的原则之一是它没有做出任何假设你需要处理的数据类型,这是一个重点,因为我们有机会集成任何类型的系统,从而无需将数据转换为规范格式。

介绍

Camel允许您创建EIP(Enterpise Integration Patterns, 企业集成模式),以基于Java的DSL(Domain Specific Language, 域特定语言)或Fluent API,通过Spring或Blueprint的xml配置文件或者通过Scala DSL来实现路由和中介规则。这意味着无论是在Java、Scala或者是XML编辑器中都可以在IDE中使用自动提示从而智能地完成路由规则。

Apache Camel使用URIs,因此它可以借助可插入的数据格式选项轻松的与任何类型的传输或消息传递模型(如HTTP、ActiveMQ、JMS、JBI、SCA、MINA或CXF)一起使用。Apache Camel是一个小型的库,具有最小的依赖性,可以轻松嵌入任何Java应用程序。无论使用何种传输方式,Apache Camel都使用相同的API,因此只需要学习一次API即可与开箱即用的所有组件进行交互。

Apache Camel具有强大的Bean绑定功能,可与Spring、CDI、Blueprint和Guice等流行框架无缝集成。

Apache Camel拥有广泛的测试支持,可以轻松的对路由进行单元测试。

组件

Apache Camel附带了许多组件,数据格式和语言等。

DSL

以下示例为路由文件从文件夹到JMS对列。

from("file:data/inbox").to("jms:queue:order");
<route>
    <from uri="file:data/inbox"/>
    <to uri="jms:queue:order"/>
</route>

Camel DSL使用Java等真正的编程语言,因此您可以使用现有的工具支持。在这里,您可以看到Eclipse IDE的自动完成功能如何为我们提供DSL列表:

路由自动提示路由自动提示

Camel消息模型

在Camel中有两种消息模型的抽象。

Message

Message是系统在使用时彼此通信的实体消息渠道。Message从发送者到接收者以一个方向流动:

Message消息流图Message消息流图

Message有一个Body、headers和可选的attachments:

Message结构图Message结构图

Exchange

Camel中的Exchange是路由期间消息的容器,Exchange也为系统之间的各种类型的交互提供支持,也成为消息交换模式MEP。

Exchange中的Message

Exchange中还有两个重要属性inMessage和outMessage。这两个属性分别代表Exchange在某个处理元素(处理器、表达式等)上的输入消息和输出消息。

当控制端点和处理器、处理器和处理器间的Message在Exchange中传递时Exchange会自动将上一个元素的输出值作为作为这个元素的输入值进行使用。但是如果在上一个处理器中,开发人员没有在Exchange中设置任何out message内容(即Excahnge中out属性为null),那么上一个处理器中的in message内容将作为这个处理器的in message内容。

Camel架构

Camel架构图Camel架构图

CamelContext

CamelContext结构图CamelContext结构图

Routes

上一篇下一篇

猜你喜欢

热点阅读