初识Camel


转自:https://blog.csdn.net/TuxedoLinux/article/details/86064833

文档:<Camel in Action>

API:https://www.javadoc.io/doc/org.apache.camel/camel-api/latest/index.html

Camel是什么 

Camel框架的核心是一个路由引擎,它允许你定义自己的路由规则,决定接受哪些消息,做出决定如何处理,发送这些消息给其他目标。Camel用这种集成语言允许你定义复杂的路由规则。

Camel 提供了高水平的抽象,它允许你根据相同的api协议或者系统的数据类型集成各种各样的系统。Camel的组件提供了特殊实现的接口api,其目的是给不同的协议和数据类型服务。Camel打破了传统模式,它支持80多种不同的协议和数据类型,它的扩展性和模块性允许你实现你自己专有协议的无缝插件。这些体系结构的选择淘汰没有必要的转换,从而使camel更加的高效,易学。《Enterprise Integration Patterns

camel功能点如下:

  路由和斡旋引擎

       企业集成模式

       Domain-speclfic language(DSL)

       可拓展组件库

       有效负载路由

       模块化、组件式体系结构

       POJO模型

       容易配置

       数据类型自动转换

       轻量核心

       测试装备 

    

CamelContext是一个有类别容器;提供了对许多有用服务的访问,最值得注意的是组件、类型转换器、注册表、端点、路由、数据格式和语言。

Components:包含用到的组件。Camel 能够通过自动载入类路径或者自动激活OSGI容器等方式来运行。第七章中讨论。

Endpoints:包含已创建的endpoints。Endpoint是camel的抽象概念。信道末端模型。系统可以利用信道收发消息。如下图:

下图:展示了它是怎么工作的

在camel中,你需要在URL中配置endpoint。例如file:data/inbox?delay=5000,你也用这种法师涉及到了endpoints。在运行的时候,camel将会用URL标记的方式查找endpoint。

Scheme 标识endpoint的类型。

Routes:包含被添加的路由。会在第二章中讲解。

Type converters:包括已经载入的类转换。Camel拥有可以手动或自动转换类的机制。第三章中详细描述。

Registry:包含可以查阅beans的注册表。默认情况下,它是JNDI registry。如果基于Spring,它是Spring ApplicationContext ,如果使用OSGI容器,它是OSGI registry。第四章讲。

Languages:包含载入的语言。Camel允许使用不同的语言创建表达式。你会看到在讲解DSL的时候使用的Xpath 语言。完全参考camel自己的简约的表达式语言可以参考 附录A。

 PROCESSOR:处理过程是camel的一个核心概念。代表了一个有处理能力节点的使用,创建,或者修改交换输入。在路由期间交换会从一个处理流到下一个处理;例如你可以想象一个画面,每个节点都有指定的处理方式。一个处理的输出到一个处理的输入连成一个队。

Producer是camel的一个抽象概念。它是用来创建消息给endpoint

 

   Producer是一个camel的抽象类,实体能够创建并发送消息到endpoint。图1.10一方面也说明了这个概念。当一个消息需要被发送到一个endpoint时,生产者将创建一个exchange并填充兼容个别项目的endpoint数据。例如:FileProducer会将消息body写入到一个文件。还有JmsProducer会把Camel消息映射到正在发送消息到JMS目标上的javax.jms.Messagebefore中。在camel中,这是很重要的功能,因为它隐藏了与特有的transports的相互作用的复杂性。你要做的是将一个消息路由到endpoint,然后producer会做重活。

  

  消费者是接收生产者生产的消息的服务。把他们封装到exchange中并且发送他们去处理。消费者是camel中被路由的exchanges的源头。

     回头看图1.10,我们看到消费者与其他camel概念的交互。创建一个新exchange,消费者将使用endpoint封装被消费的有效载荷。Processor然后使用路由引擎发起exchange的路由。在camel中有两种消费者:事件驱动的消费者 和 轮询的消费者。它们的区别很重要,因为它们有助于解决问题。

  事件驱动的消费者(EVENT-DRIVEN CONSUMER):  这种消费者和客户-服务结构webservice。同时在EIP中也表示为异步的接收者。消费者监听指定的消息通道,通常使用TCP/IP端口或JMS队列,等待客户端发送消息给它。当消息到达的时候,消费者唤醒并且将消息进行处理。

  轮询的消费者(POLLING CONSUMER). 相比事件驱动消费者,轮询消费者主动从指定源获取消息,例如FTP服务。轮询消费者在EIP术语中也是 同步的接受者,因为它不会获取更多消息,直到他完成当前消息的处理。通常轮询消费者是定时轮询消费者,通过指定间隔。File,FTP和Email传输通常用定时轮询消费者。

 

      示例中,在camel运行时会首先创建一个camelContext,通过RouteBuilder和java DSL来添加路由逻辑。通过DSL,可以一目了然的让camel组件,endpoints,消费者,生产者等实例化。你要关注的是定义路由为你的集成项目。底层中,camel是访问FileComponent并且用它作为一个工厂创建endpoint和它的生产者。同时也创建消费者。

路由引擎

  Camel的路由引擎其实就是做消息移动。    引擎不会暴露给开发者。但是你应该意识到它的存在,它做了所以的重活,确保消息能够根据属性准确路由。

路由

  路由是camel的一个核心抽象概念。最简单的方式是定义一个路由作为处理链。在消息 应用中使用路由有很多种原因。解耦的客户端和服务器端,生产者和消费者,路由可以

  • 动态的决定一个客户端将会被那个服务调用。

  • 提供了一种处理额外流程的灵活方式

  • 运行服务器端和客户端独立开发。

  • 增强一些系统的功能。   

  Camel中的每一个路由都有一个唯一的标识。这些标识为logging,debuging,监控,路由的启动停止服务的。路由也有一个精确的输入消息资。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM