文档章节

Camel In Action 读书笔记 (4)

vidy_tu
 vidy_tu
发布于 2013/06/08 16:06
字数 578
阅读 785
收藏 0

<p>第三章主要讲数据类型转换。</p> <p>数据类型转换有两种形式的转换:</p> <p>Data format transformation ------&#160; 数据格式的转换,比如:csv文件转换成xml.</p> <p>Data type transformation&#160;&#160;&#160; ------&#160; 数据类型的转换,比如:String转换成TextMessage.</p> <p>Camel提供的消息转换有以下几种方式:</p> <table border="0" cellspacing="0" cellpadding="2" width="550"><tbody> <tr> <td valign="top" width="181">Transformation</td> <td valign="top" width="367">Description</td> </tr> <tr> <td valign="top" width="181">在路由中转换</td> <td valign="top" width="367">通过MessageTranslator 或者EnricherEIPS转换</td> </tr> <tr> <td valign="top" width="181">通过components转换</td> <td valign="top" width="367">比如XSLT组件用来转换XML.</td> </tr> <tr> <td valign="top" width="181">通过data formats转换</td> <td valign="top" width="367">&#160;</td> </tr> <tr> <td valign="top" width="181">通过模板转换</td> <td valign="top" width="367">比如Apache Velocity</td> </tr> <tr> <td valign="top" width="181"> <p>Camel’s typeconverter <br />mechanism</p>&#160; 转换</td> <td valign="top" width="367">序列化,反序列化</td> </tr> </tbody></table> <p>具体如下:</p> <h3><em>Using the Message Translator EIP</em></h3> <p><a href="http://static.oschina.net/uploads/img/201306/08160631_wb37.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://static.oschina.net/uploads/img/201306/08160632_DDu8.png" width="461" height="113" /></a> </p> <p>Camel提供了三种方式:</p> <p>■ Using a Processor</p> <p>Processor 接口提供了方法:public void process(Exchange exchange) throws Exception; <br />■ Using beans</p> <p>通过自定义bean转换 <br />■ Using &lt;transform&gt;</p> <p>transform是DSL中的一个方法,</p> <p><em>from(&quot;direct:start&quot;) <br />.transform(body().regexReplaceAll(&quot;\n&quot;, &quot;&lt;br/&gt;&quot;)) <br />.to(&quot;mock:result&quot;);</em></p> <p>&#160;</p> <h3><em>Using the Content Enricher EIP</em></h3> <p>Enricher EIP是说做消息转换时,消息本身数据时不够的还需要请求另一个资源如下图:</p> <p><a href="http://static.oschina.net/uploads/img/201306/08160632_uXNZ.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://static.oschina.net/uploads/img/201306/08160632_weHR.png" width="490" height="152" /></a> </p> <p>Enricher EIP 有两种模式:</p> <p>pollEnrich -- 作为一个消费者来获取第三方消息来转换消息 比如 JMS,文件系统。</p> <p>enrich&#160;&#160;&#160;&#160;&#160; -- 作为一个生产者数据发送到第三方接受返回来转换消息。比如 HTTP,WebService。</p> <p>这两种模式都要实现AggregationStrategy接口。</p> <p><em>from(&quot;quartz://report?cron=0+0+6+*+*+?&quot;) <br />.to(&quot;</em><a href="http://riders.com/orders/cmd=received&quot;)"><em>http://riders.com/orders/cmd=received&quot;)</em></a> <br /><em>.process(new OrderToCSVProcessor()) <br />.pollEnrich(&quot;ftp://riders.com/orders/?username=rider&amp;password=secret&quot;,</em></p> <p><em>new AggregationStrategy() { <br />public Exchange aggregate(Exchange oldExchange, <br />Exchange newExchange) { <br />if (newExchange == null) { <br />return oldExchange; <br />} <br />String http = oldExchange.getIn() <br />.getBody(String.class); <br />String ftp = newExchange.getIn() <br />.getBody(String.class); <br />String body = http + &quot;\n&quot; + ftp; <br />oldExchange.getIn().setBody(body); <br />return oldExchange; <br />} <br />}) <br />.to(&quot;file://riders/orders&quot;);</em></p> <h3><em>Transforming XML</em></h3> <p>XML的转换主要有两种形式:</p> <p>1.XSLT格式化</p> <p><em>from(&quot;file://rider/inbox&quot;) <br />.to(&quot;xslt://camelinaction/transform.xsl&quot;) <br />.to(&quot;activemq:queue:transformed&quot;)</em></p> <p>2.XML与JAVA对象的序列化和反序列化</p> <p>提供了两个方法:marshal/unmarshal</p> <p>a)XSTREAM的形式</p> <p><em>&lt;route&gt; <br />&lt;from uri=&quot;direct:foo&quot;/&gt; <br />&lt;marshal&gt;&lt;xstream/&gt;&lt;/marshal&gt; <br />&lt;to uri=&quot;activemq:queue:foo&quot;/&gt; <br />&lt;/route&gt;</em></p> <p>b)JAXB的形式</p> <p><em>&lt;camelContext id=&quot;camel&quot; xmlns=&quot;</em><a href="http://camel.apache.org/schema/spring&quot;"><em>http://camel.apache.org/schema/spring&quot;</em></a><em>&gt; <br />&lt;dataFormats&gt; <br />&lt;jaxb id=&quot;jaxb&quot; contextPath=&quot;camelinaction&quot;/&gt; <br />&lt;/dataFormats&gt; <br />&lt;route&gt; <br />&lt;from uri=&quot;direct:order&quot;/&gt; <br />&lt;marshal ref=&quot;jaxb&quot;/&gt; <br />&lt;to uri=&quot;activemq:queue:order&quot;/&gt; <br />&lt;/route&gt; <br />&lt;route&gt; <br />&lt;from uri=&quot;activemq:queue:order&quot;/&gt; <br />&lt;unmarshal ref=&quot;jaxb&quot;/&gt; <br />&lt;to uri=&quot;direct:doSomething&quot;/&gt; <br />&lt;/route&gt; <br />&lt;/camelContext&gt;</em></p> <p><font color="#ff0000">注:Camel 还提供了csv和json的数据格式化,如有兴趣请看原文。</font></p> <h3><em>Writing your own data format</em></h3> <p>我们可以自定义数据格式化,实现接口:</p> <p><em>org.apache.camel.spi.DataFormat</em></p> <p><em>最后讲下</em></p> <h3><em>Using Camel type converters</em></h3> <p>我们经常取消息时会用</p> <p><em>String custom = exchange.getIn().getBody(String.class);</em></p> <p>这就是type converters的一种形式,TypeConverter 需要注册到TypeConverterRegistry 中去。</p> <p>TypeConverter还有如下的使用方法:</p> <p><em>from(&quot;file://riders/inbox&quot;) <br />.convertBodyTo(String.class) <br />.to(&quot;activemq:queue:inbox&quot;);</em></p> <p>我们也可以自定义type converter,通过注解的形式@Converter。</p>

© 著作权归作者所有

vidy_tu

vidy_tu

粉丝 33
博文 18
码字总数 7631
作品 0
武汉
程序员
私信 提问
加载中

评论(0)

Camel In Action 读书笔记 (5)

接下来说说第四章, 第四章介绍如何在Camel中使用普通bean,关于bean的使用方式前面已有介绍:javaDSL和SpringDSL两种方式。 下面讲下bean的Camel中的使用模式。 The Service Activator patt...

vidy_tu
2013/06/09
602
0
Camel In Action 读书笔记 (8)

第8章Enterprise integration patterns是core Camel的最后一章了,第二章已经介绍了一部分camel在eip中的应用。这一章全部都是讲eip. 看来eip确实是camel的核心,camel确实是基于eip的。 这一...

vidy_tu
2013/06/16
1.9K
7
Camel In Action 读书笔记 (2)

在1.4中介绍了Camel的整体架构,以及Camel中的一些概念. 架构图 关于各个概念不在此详述. Camel的主要流程: 1:创建CamelContext CamelContext context = new DefaultCamelContext(); 2.添加C...

vidy_tu
2013/06/01
1.6K
0
Camel In Action 读书笔记 (6)

今天继续学习第五章,Error handling. Camel作为一个集成框架,需要与外部系统对接。外部系统的不稳定因素导致其异常处理也相对复杂些。 Camel将异常分为两大类: 一是 irrecoverable error(...

vidy_tu
2013/06/11
1.1K
1
Apache Camel 2.17.1 发布,路由以及媒介引擎

Apache Camel 2.17.1 发布了,一些提升及新特性: [CAMEL-9574] - Be able to force one-way operation when using camel-cxf transport [CAMEL-9883] - Add a SpringCache based idempotent......

淡漠悠然
2016/05/09
1.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

LiteOS云端对接教程10-LiteOS使用NB模组基于LWM2M对接华为OC平台实战

1. 在云端添加测试设备 打开之前教程新建的LWM2M产品,进入设备管理界面新建真实设备,设备标识符要填写NB模组的IMEI号,可以使用如下命令查看: AT+CGSN=1 测试结果如下: +CGSN:86772503...

小熊派开源社区
24分钟前
48
0
多团队基于git代码管理协作流程

多团队git协同开发流程 一、版本管理的挑战 虽然有这么优秀的版本管理工具,但是我们面对版本管理的时候,依然有非常大得挑战,我们都知道大家工作在同一个仓库上,那么彼此的代码协作必然带...

kingbox2016
25分钟前
60
0
Elmedia Video Player Pro for Mac(苹果万能视频播放器) v7.9中文版

mac电脑用哪款视频播放器最合适呢?elmedia video player pro Mac版是适用于Mac OS的视频播放器。它可以播放几乎任何文件类型,无论是AVI,MP4,FLV,WMV,MKV,MP3,M4V等.Elmedia Video Pl...

云不若
30分钟前
71
0
11个默克尔树开源项目

Merkle树是一种可以有效验证部分数据存在于指定数据集并且未被篡改的高效的哈希树结构,作为一种底层技术广泛应用在各种区块链的实现当中,对于商品溯源、知识产权确认、区块链公证等区块链应...

区块链教程
57分钟前
64
0
Linux系统运维工程师入门绝招放送

运维是干嘛的?安装服务器系统?重装系统再装系统?背锅的? 我就稀里糊涂的,这样报着必死的决心,考下RHCE认证,走上了Linux运维的道路,成为了一名linux运维工程师。有些心得跟大家分享下...

linuxprobe2020
今天
64
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部