转自: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,监控,路由的启动停止服务的。路由也有一个精确的输入消息资。