第一章 Camel介绍
Apache的Camel™是一种通用的开源集成框架基于已知的企业集成模式。Camel能够在大量的领域语言中让你定义路由以及中间规则。定义路由规则的方式主要有两种:Java-based domain-specific language ( DSL ) 和 Spring XML。
spring framework是什么框架的 以下项目利用Apache的Camel作为路由和中介机:
Apache ServiceMix -一个流行的分布式开源ESB和JBI容器;
Apache ActiveMQ -一个成熟的、广泛使用的开源消息代理;
Apache CXF -智能Web服务套件(JAX-WS和JAX-RS);
Apache Karaf -一个小的基于OSGi运行时,应用程序可以部署;
Apache MINA高性能NIO驱动的网络框架。
一、什么是Camel
camel首先是一个规则引擎。其次才是一个开源项目。
框架的核心是一个路由引擎,更精确的说是路由引擎制造商。它允许你定义自己的路由规则,决定从哪个消息来源接受消息,并决定如何处理和发送这些消息。
Apache Camel是Apache基金会下的一个开源项目,提供企业集成模式的实现。Camel提供的基于规则的路由(Routing)引擎,可以使用Camel定义的DSL语言,方便的定义出各种Routing。
如下例:
from(“file://xxxx").to("activemq://xxxx") 将某文件,读入并写入到ActiveMQ的JMS中。
DSL可以用于Java, Scala, Groovy,也可以使用在XML。如下列:
■ Java DSL
from("file:data/inbox").to("jms:queue:order");
■ Spring DSL
<route>
<from uri="file:data/inbox"/>
<to uri="jms:queue:order"/>
</route>
■ Scala DSL
from "file:data/inbox" -> "jms:queue:order"
丰富的组件库
提供了一个超过80个components。这些组件启用Camel来连接传输,使用API,并格式化数据。
自动类型转换
camel有内置的类型转换机制,有150多个转换器,如果需要转换camel不支持的类型,你可
以创建你自己的类型转换器。
轻量级
Camel的核心非常小,大概1.6 MB,只依赖Apache Commons Logging and Fuse-Source Commons Management。这使得Camel可以非常方便的易于嵌入或部署在任何地方,比如独立的应用程序、web application、Spring application、JavaEE application,、JBI container、OSGI bundle等等。
Camel的信息模型:
org.apache.camel.Message——是当使用消息传递通道时系统所使用的通信实体。消息流在一个方向上从发送者到一个接收者
消息包含标题、可选附件、消息内容。
消息的唯一标识符是string类型,唯一性由信息的发送者保证,如没有定义camel用自己的UID发生器。
body的类型是java.lang.Object。这意味着一个消息可以存储任何类型的内容。当发送器和接收器使用不同的格式,camel提供了一个机制,将数据转换成一个可接受的格式。
org.apache.camel.Exchange——用于信息交换的Camel抽象,包含入、出的对象。在路由过程中,camel是消息交换的容器。交换的模式可以是:
InOnly—单向消息(也被称为事件消息)。例如,JMS消息往往是单向的信息传递。
InOut—请求响应。例如HTTP的传输。
交换的内容由下图:
Exchange ID ——交换的唯一标识。如果没有设置标识,camel是生成默认的唯一标识。
MEP——表示消息交换的模式(InOnly、InOut)
Exception——路由过程中的异常信息。
Properties——camel可以在路由过程中添加各种属性。可以在交换的生命周期中的任何一点存储和检索属性。
In message——这是输入消息,这是强制性的。在消息中包含请求消息。
Out message——这是一个可选的消息,只存在如果MEP INOUT,报文包含回复消息。
Camel的组成:
camel由processor、component和route组成的。所有这些都包含在CamelContext中。
route是用camel的领域特定语言定义(DSL)。
processor用于传递过程中变换和操作信息。
components是camel中添加连通性的扩展点,为了使这些系统暴露,组件提供了一个端点接口。
CamelContext的组成:
Routes:每条路由都有一个唯一的标识符,用于记录、调试、监视和启动和停止路由。路由有消息的输入源及输出源。
Endpoints:Camel中的Endpoint类似webservice中的endpoint,即某个资源的位置。Camel使用URI来定位一个endpoint,如:file:///edi/po/?include=.*\\.txt, 代表/edi/po/下的所有txt文件,即为一个endpoint。
例:file:data/inbox?delay=5000
二、示例:
1、file to file
from("file:data/inbox?noop=true").to("file:data/outbox");
2、ftp to jms
context.addRoutes(new RouteBuilder() {
public void configure() {
from("ftp://10.3.10.96//dabao/testgis_lib?username=root&password=123456")
.to("jms:incomingOrders");
}
});
from("ftp://10.3.10.96//dabao/testgis_lib?username=root&password=123456").
process(new Processor() {
public void process(Exchange exchange) throws Exception {
System.out.println("We just downloaded: "
+ In().getHeader("CamelFileName"));
}
}).
to("jms:incomingOrders");
3、Camel Spring 配置
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="
/schema/beans
/schema/beans/spring-beans-3.0.xsd
/schema/spring
/schema/spring/camel-spring.xsd">
...
<camelContext xmlns="/schema/spring"/>
</beans>
◆继承RouteBuilder方式:
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论