Apache Camel 学习 简介01

Apache Camel:
        概念:是一个基于 规则路由 和 processor处理 的引擎。
            官网介绍:Camel允许您创建企业集成模式,以基于Java的域特定语言(或Fluent API),基于Spring或Blueprint的Xml配置文件或通过Scala DSL实现路由和中介规则。
这意味着无论是在Java,Scala还是XML编辑器中,您都可以在IDE中智能地完成路由规则

 主要功能:协议转换,消息路由
 核心思想:从一个from源头得到数据,通过processor处理,再发到一个to目的地.   这个from和to可以是我们在项目集成中经常碰到的类型:一个FTP文件夹中的文件,一个MQ的queue,一个HTTP request/response,一个webservice等等.

 要素:
            Camel Context:Camel的运行容器,管理所有的camel路由,类似Spring的context.
            CamelContext是对Camel运行时的一个抽象,一般来说一个Camel应用里会有一个CamelContext对象;
            Route:路由;定义了Message在一个系统中传输的真实路径/通道。开发者可以自己定义路由,并且需要信任引擎可以完成复杂的传输工作。每个路由都有唯一的标识符,用来记录日志,调试,监控,以及启动或停止路由。
           ASB中路由在csb-routes中的restproxy中,其中的CallRecordPolicy中的onstart(),onStop()等方法定义了路由调用前后的操作等,ValidityCheck(implements Processor)定义了访问路由时的参数检查

路由就是对于一个Message的处理流程的定义,定义路由规则即为定义一个流程,让其按照我们定义的规则走下去

    一个route就是将从输入队列中得到的消息,通过一步步设置好的逻辑判断(例如过滤器和路由规则),到达一个目标队列中(如果有的话);Camel为应用开发者提供了两种方式来定义这些路由规则:

     Processor:是一个消息接收者和消息通信的处理器(一个处理消息的类)。Processor是Route的一个元素,可用来消息格式转换或者其他的一些变化;

 Endpoint:   Endpoint作为Camel系统中一个通道的端点,可以发送或者接收消息。在Camel中Endpoint通过URI来配置,在运行时Camel来查找端点,端点的功能强大全面且可维护。
Component:或者说EndpointFactory更合适,Component是创建Endpoint实例的工厂类; 


 CamelContext对象维护的一个组件名到Component对象的映射表

Camel对多种通信协议提供了开箱即用的支持,这种支持正是建立在实现了Component的类及 让CamelContext自动建立映射的配置文件的基础之上的。

Message:  Message 接口提供了一个对单个消息的抽象,这些消息可以是一个请求,回复或者是一个异常。
 Exchange: 一个消息之间通信的抽象的会话;  在Camel的Route中,消息在各Route中是以Exchange形式传递的

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

camel是一款基于规则快速实现消息流转的开发组件,集成该组件后,你的程序可以编写最少的代码实现复杂的消息在不同的协议规则间流转。

例如:

程序实现从Ftp获得.xml文件,然后将收到的文件内容值转换后,发送到Jms Queue中,并且将Request写入到数据库log表。

Ftp组件->Jms组件->Db组件

控制CamelContext

当启动Camel后,它会创建一个CamelContext对象,该对象拥有了很多关于如何运行Camel的信息,还包含我们所创建的Route的定义。现在如果你想通过CamelContext获得更多的控制,那么你需要编写自己的主类代码。我在这举个简单的例子。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

基础

Apache Camel十一个Java库和引擎,有多种不同的整合模式,然而他并不是BPMN或者ESB,虽然可以在此引擎下实现他们。Apache Camel是一个编程人员调节、整合问题的工具。

Message

org.apache.camel.Message是Camel中一个基本的包含数据和路由的实体,Messages包含了

1.唯一的识别(Unique Identifier)--java.lang.String类型

2.头信息(Headers)--会提供一些内容的提示,头信息被组织成名值对的形式,string-->Object

3.内容(body)是一个Object类型的对象,这就意味着,你要确保接收器能够理解消息的内容。当消息发送器和接收器使用不同的内容格式的时候,你可以使用Camel的数据转换机制将其转换为一个特定的格式。在许多情况下预先定义类型可以被自动转换。

4.错误标记(fault flag)使用来标记正常或者错误的标记,通常由一些标准类定义,例如(WSDL)

Exchange

org.apache.camel.Exchange 是一个消息之间通信的抽象的会话。下面列出的就是这样一个会话,使得组件更为全面

1.Exchange ID

2.MEP 一个类似InOnly或者InOut的消息交换模式。当模式是InOnly的时候,消息交换中只包含IN-Message

3.Exception在路由过程中的任何异常

4.Properties有点类似与message 的headers ,但是他们将持续到整个exchange结束,Camel还可能利用他们进行一些特殊的通信。

5.IN-Message

6.OUT-Message

Camel Context

现在让我们来看看一张图,我们看到的是一些不同的相互链接的构件,而在他们中间起链接作用的粘合剂就是Camel Context了。他将实体链接一起,有的时候Camel context被称为Camel运行时的容器。

Component

Component是一些Endpoints URI的集合。他们通过连接码来链接(例如file:,jms:),而且作为一个endpoint的工厂。现在Camel中又超过80个Component。当然你一可以通过扩展org.apache.camel.impl.DefaultComponent来实现自己的Component

Route

顾名思义,Route,就是路由,它定义了Message如何在一个系统中传输的真实路径或者通道。路由引擎自身并不暴露给开发者,但是开发者可以自己定义路由,并且需要信任引擎可以完成复杂的传输工作。每个路由都有一个唯一的标识符,用来记录日志、调试、监控,以及启动或者停止路由。

路由也有一个输入的Message,因此他们也有效的链接到一个输入端点。路由定义了一种领域特有的语言(DSL)。Camel提供了java、scala和基于XM的Route-DSL。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

介绍Apache Camel

集成路由被写成由块组成的管道。它创建了一个完全透明的图像来帮助追踪数据流。

   Apache camel 有许多流行的API适配器。例如,从Apache Kafka获取数据,监控AWS EC2实例,与Salesforce集成 - 所有这些任务都可以使用现成的组件来解决。

     Apache Camel可以被描述为一个“中介路由器”,它是一个面向消息的中间件框架,实现了我熟悉的EIP列表。它利用这些模式,支持所有常见的传输协议,并且包含了大量有用的适配器。骆驼能够处理大量的集成例程,而无需编写自己的代码。

    Apache Camel路由可以用Java或Scala DSL编写。(XML配置也可用,但过于冗长,调试功能更差)。它不会对通信服务的技术堆栈施加限制,但是如果您使用Java或Scala编写,则可以将Camel嵌入到应用程序中独立运行

      路由和转换逻辑现在只能用于专门的Apache Camel配置。其次,通过简洁自然的DSL结合EIP的使用,出现了系统之间的依赖关系图。它由易理解的抽象构成,路由逻辑易于调整。最后,我们不必编写转换代码的堆,因为适当的适配器可能已经包含在内。

   编写一个示例路线

我们开始编写代码。我们将从一个同步数据流开始,这个数据流将消息从单一来源路由到收件人列表。路由规则将用Java DSL编写。

在这个定义中,我们创建了一个从JSON文件中获取记录的路径,将它们拆分成条目,并根据消息内容路由到一组处理程序。

发布了365 篇原创文章 · 获赞 2 · 访问量 7420

猜你喜欢

转载自blog.csdn.net/kuaipao19950507/article/details/104601976