1.Camel要素
Endpoint 控制端点:
概述:
Apache Camel中关于Endpoint最直白的解释就是,Camel作为系统集成的基础服务组件,在已经编排好的路由规则中,
和其它系统进行通信的设定点。
这个“其它系统”,可以是存在于本地或者远程的文件系统,可以是进行业务处理的订单系统,可以是消息队列服务,可以是提供了访问地址、访问ip、
访问路径的任何服务。Apache Camel利用自身提供的广泛的通信协议支持,使这里的“通信”动作可以采用大多数已知的协议,
例如各种RPC协议、JMS协议、FTP协议、HTTP协议。。。
实现:
1.Camel中的Endpoint控制端点使用URI的方式描述对目标系统的通信。例如以下URI描述了对外部MQ服务的通信,消息格式是Stomp:
// 以下代码表示从名为test的MQ队列中接收消息,消息格式为stomp
// 用户名为username,监听本地端口61613
from("stomp:queue:test?tcp://localhost:61613&login=username")
// 以下代码表示将消息发送到名为test的MQ队列中,消息格式为stomp
to("stomp:queue:test?tcp://localhost:61613&login=username");
2. 更多的stomp控制端点的说明可参见Camel中的说明:http://camel.apache.org/stomp.html 。
再例如,我们可以使用Http协议和某一个外部系统进行通信,更多关于Http控制端点的说明
也可参见Camel中的说明: http://camel.apache.org/http.html :
// 主动向http URI描述的路径发出请求(http的URI笔者不需要再介绍了吧)
from("http://localhost:8080/dbk.manager.web/queryOrgDetailById")
// 将上一个路由元素上Message Out中消息作为请求内容,
// 向http URI描述的路径发出请求
// 注意,Message Out中的Body内容将作为数据流映射到Http Request Body中
to("http://localhost:8080/dbk.manager.web/queryOrgDetailById")
总结:以上的示例中,请注意“from”部分的说明。它并不是等待某个Http请求匹配描述的URI发送到路由路径上,
而是主动向http URI描述的路径发送请求。如果想要达到前者的效果,请使用Jetty/Servlet开头的相关通信方式:
http://camel.apache.org/servlet.html 和 http://camel.apache.org/jetty.html。
而通过Apache Camel官网中 http://camel.apache.org/uris.html 路径可以查看大部分Camel通过URI格式所支持的Endpoint。
endpoint和URI之间关系的描述:
官网:Camel makes extensive use of URIs to allow you to refer to endpoints which are lazily created by
a Component if you refer to them within Routes.
从这段官方描述可以看出,不同的endpoint都是通过URI格式进行描述的,并且通过Camel中的org.apache.camel.Component(endpoint构建器) 接口的响应实现进行endpoint实例的创建。需要注意的是,Camel通过plug方式提供对某种协议的endpoint支持,
所以如果读者需要使用某种Camel的endpoint,就必须确定自己已经在工程中引入了相应的plug。
例如,如果要使用Camel对Netty4-Endpoint的支持,就需要在工程中引入Camel对Netty4的支持,如下:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-netty4</artifactId>
<version>x.x.x</version>
</dependency>
注:在这个camel-plug引用中,就包含了Netty4对Endpoint的实现和Netty4对Component的实现:
org.apache.camel.component.netty4.NettyEndpoint、org.apache.camel.component.netty4.NettyComponent。
Exchange和Message消息格式:
概述:消息在我们已经编排好的业务路径上进行传递,通过我们自定义的消息转换方式或者Apache Camel提供的消息转换方式进行消息格式转换。
那么为了完成这些消息传递、消息转换过程Camel中的消息必须使用统一的消息描述格式,并且保证路径上的控制端点都能存取消息。
过程和Exchange的作用:
Camel提供的Exchange要素帮助开发人员在控制端点到处理器、处理器到处理器的路由过程中完成消息的统一描述。
一个Exchange元素的结构如下图所示: