Camel学习
Camel学习 (4)
⼀.消息类型(Message,Exchange) (4)
1) Message (4)
2) Exchange (5)
⼆.Camel的主要流程: (5)
1:创建CamelContext (5)
2. 添加Component (5)
3.创建Endpoint (6)
4.定义路由 (6)
5.把路由加⼊context中 (6)
6.启动context: (6)
三.Camel的路由配置有三种⽅式 (7)
1.纯java⽅式创建RouteBuilder (7)
2. 纯spring⽅式 (7)
3Java+Spring (7)
四.路由常⽤模式 (8)
1. Using a content-based router(基于内容的路由) (8)
www.doczj/doc/355c5c88f12d2af90342e62c.html ing message filters(消息过滤) (9)
3. Using multicasting(多点⼴播) (9)
4. Using recipient lists(收件⼈列表模式) (10)
6. Using the wireTap method(消息监听,复制) (11)
五.数据类型转换 (11)
⼀.数据类型转换有两种形式的转换: (11)
⼆.Camel提供的消息转换 (12)
Using the Message Translator EIP (12)
Camel提供了三种⽅式: (12)
Using the Content Enricher EIP (13)
Transforming XML(XML的转换) (14)
1.XSLT格式化 (14)
2.XML与JA V A对象的序列化和反序列化 (14)
六.⾃定义数据格式化 (14)
七.使⽤Camel类型转换器 (14)
⼋.如何在Camel中使⽤普通bean (15)
⼀.服务代理模式(The Service Activator pattern) (15)
⼆. Bean的注册⽅式 (15)
三. 选择Bean的⽅法 (16)
九.bean的参数绑定 (17)
1.1.Binding using built-in types(类型绑定) (17)
2. Binding using Camel annotations (注解绑定) (18)
⼗.Camel-Core 分析 (19)
⼗⼀.Error handling.Camel的错误处理机制 (20)
1.irrecoverable error的处理⽅式 (21)
3. Error handlers in Camel(错误处理) (21)
4使⽤与返还错误处理程序 (22)
www.doczj/doc/355c5c88f12d2af90342e62c.html ing exception policies(使⽤异常策略) (23)
⼗⼆. 测试功能 (23)
⼗三. 企业集成模式 (27)
■The Aggregator EIP 消息合并 (27)
■The Splitter EIP 消息分拆 (29)
■The Routing Slip EIP 根据消息标签进⾏路由(也是⼀种路由) (29)
■The Dynamic Router EIP 动态路由 (29)
■The Load Balancer EIP 负载均衡 (29)
Camel学习
⼀.消息类型(Message,Exchange)
org.apache.camel.Message----是消息的基本的实体。
org.apache.camel.Exchange---描述消息的⼀次交换。exchange包含⼀条流⼊(in)的Message,如果有应答则还有⼀条流出(out)的Message.
1)Message
message有三部分组成:
1.body(有效负载)
body是Object型可以⽤来存放任何数据
2.Headers
Headers放的是消息相关的信息,⽐如消息发送者(sender),消息编码(encode),验证信息….Headers通过key-value的形式存储数据。key是String型,value是Object型。消息也可以包含附件常⽤在web service 和email的路由中
3.Attachments
mesage有⼀个全局唯⼀标⽰(identifier),类型为(www.doczj/doc/355c5c88f12d2af90342e62c.html ng.String).
4.错误信息:FAULT FLAG
有部分协议如(WSDL,JBI)区分输出(output)与错误消息。
2)Exchange
exchange包含如下图所⽰:
MEP⽤来区分交互类型:
InOnly代表单向模式(one way),⽐如JMS
InOut代表还应答模式(request-response).⽐如HTTP
Exchange ID :
Exception:
Properties:
⼆.Camel的主要流程:
1:创建CamelContext
CamelContext context = new DefaultCamelContext();
2.添加Component
context.addComponent("direct", new DirectComponent());
注:context如果不到对应的component会⾃动去META-INF\services\org\apache\camel\component查对应的component并⾃动加载.所以常⽤组件可省略.
3.创建Endpoint
4.定义路由
RouteBuilder builder = new RouteBuilder() { //new⼀个路由
@Override
public void configure() throws Exception { //设置路由参数.
from("direct:start") //参数1
.log("${body}") //参数2
.to("mock:end"); //参数3
}
};
5.把路由加⼊context中
builder.addRoutesToCamelContext(context);
6.启动context:
context.start();
注:前⾯3步都可以省略,⼀般情况下只需要4,5,6.其余步骤context启动时会⾃动创建. 总结步骤:
2.给Context添加⼀个组件component
3.在组件component添加⼀个Endpoint节点
4.New⼀个路由RouteBuilder,并设置参数
5.将路由加⼊context中去.
6.启动context
三.Camel的路由配置有三种⽅式
1.纯java⽅式创建RouteBuilder
2.纯spring⽅式
3Java+Spring
四.路由常⽤模式
www.doczj/doc/355c5c88f12d2af90342e62c.html ing a content-based router(基于内容的路由)
如上图:路由到下⼀个节点时需要根据⽂件类型来判断是xmlOrders还是csvOrdersks可以通过choice…..when的形式来定义headerCamel的表达式常⽤的有constant,simple,header,body.
from("jms:incomingOrders") //来⾃jms:incomingOrders的消息
.choice() //选择类似if
.when(header("CamelFileName") //如果消息头的⽂件名称
.endsWith(".xml")) //以.xml结尾
.to("jms:xmlOrders") //就发送给jms:xmlOrders处理
.
when(header("CamelFileName")
.endsWith(".csv"))service fault
.to("jms:csvOrders");
www.doczj/doc/355c5c88f12d2af90342e62c.html ing message filters(消息过滤)
如上图:如果消息(xml)order节点包含test属性则⾃动过滤掉。通过filter处理,如果是xml形式的消息可⽤xpath来解析消息www.doczj/doc/355c5c88f12d2af90342e62c.html ing multicasting(多点⼴播)
如上图,xmlOrders收到的消息要同时发送到accounting和production两个队列中去。通过multicast()来实现。ExecutorService executor = wFixedThreadPool(16); //这⾥可以不指定16,默认10
from("jms:xmlOrders")
.multicast().parallelProcessing().executorService(executor)
.to("jms:accounting", "jms:production");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。