文档章节

Camel In Action 读书笔记 (5)

vidy_tu
 vidy_tu
发布于 2013/06/09 11:35
字数 538
阅读 596
收藏 0

<p>接下来说说第四章,</p> <p>第四章介绍如何在Camel中使用普通bean,关于bean的使用方式前面已有介绍:javaDSL和SpringDSL两种方式。</p> <p>下面讲下bean的Camel中的使用模式。</p> <h3><em>The Service Activator pattern</em></h3> <p>翻译过来喂服务激活模式,感觉有点别扭,说成服务代理模式貌似更好些理解些。如下图:</p> <p><a href="http://static.oschina.net/uploads/img/201306/09113459_SJBm.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/09113459_fOtB.png" width="591" height="158" /></a> </p> <p>service是一个POJO,service activator 作为Camel的一个中间代理,接受请求request,并调用service.</p> <h3><em>Camel’s bean registries</em></h3> <p>Camel对bean的管理采用注册(registry)的方式,下图展示了registry在spring下的工作方式。</p> <p><a href="http://static.oschina.net/uploads/img/201306/09113459_K9IG.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/09113459_mI2E.png" width="551" height="159" /></a> </p> <p></p> <p>Requester需要查找某个bean时,由Camel Registry去通过真正的registry(Spring 的ApplicationContext)去查找对应的bean.</p> <p>Camel提供了如下registry:</p> <p>&#160;</p> <table border="0" cellspacing="0" cellpadding="0"><tbody> <tr> <td width="234">Registry</td> <td width="523">Description</td> </tr> <tr> <td>SimpleRegistry</td> <td>是Reistry的一个简单实现,一般早测试,GAE,或者很少代码的情况下。</td> </tr> <tr> <td>JndiRegistry</td> <td>查找JNDI中的bean.</td> </tr> <tr> <td>ApplicationContextRegistry</td> <td>查找Spring中的bean.</td> </tr> <tr> <td>OsgiServiceRegistry</td> <td>查找Osgi中的service.</td> </tr> </tbody></table> <p>&#160;</p> <h3><em>Selecting bean methods</em></h3> <p>对于一个bean如果有多个方法时,调用bean的方法时,Camel有一套复杂的算法如下图。</p> <p>&#160;</p> <p><a href="http://static.oschina.net/uploads/img/201306/09113459_ro7b.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/09113459_NOn7.png" width="532" height="473" /></a> </p> <p><a href="http://static.oschina.net/uploads/img/201306/09113500_ofcD.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/09113500_ZHm4.png" width="533" height="658" /></a> </p> <p>&#160;</p> <h3><em>Binding with multiple parameters</em></h3> <p>最后一节讲bean的参数绑定。</p> <p>绑定有如下两种形式:</p> <p><em><strong>1.Binding using built-in types(类型绑定)</strong></em></p> <p>Camel对Exchange/Message/CamelContext/TypeConverter/Registry/Exception 提供了类型绑定的功能。如果我们的方法中有这些类型的参数,则会自动绑定相应对象</p> <p>示例如下:</p> <p><em>public string echo(String echo, Registry registry) { <br />OtherBean other = registry.lookup(&quot;other&quot;, OtherBean.class); <br />... <br />}</em></p> <p><em><strong>2.Binding using Camel annotations (注解绑定)</strong></em></p> <table border="0" cellspacing="0" cellpadding="2" width="862"><tbody> <tr> <td valign="top" width="147">Annotation</td> <td valign="top" width="713">Description</td> </tr> <tr> <td valign="top" width="147">@Attachments</td> <td valign="top" width="713">绑定消息的附属信息,类型必须是Map</td> </tr> <tr> <td valign="top" width="147">@Body</td> <td valign="top" width="713">绑定消息body.</td> </tr> <tr> <td valign="top" width="147">@Header(name)</td> <td valign="top" width="713">绑定消息header中的数据</td> </tr> <tr> <td valign="top" width="147">@Headers</td> <td valign="top" width="713">绑定消息header,类型必须是Map</td> </tr> <tr> <td valign="top" width="147">@OutHeaders</td> <td valign="top" width="713">绑定返回消息header,类型必须是Map</td> </tr> <tr> <td valign="top" width="147">@Property(name)</td> <td valign="top" width="713">绑定exchange的property中对应name的值。</td> </tr> <tr> <td valign="top" width="147">@Properties</td> <td valign="top" width="713">绑定exchange的property,类型必须是Map</td> </tr> </tbody></table> <p></p> <p>示例如下:</p> <p><em>public String orderStatus(@Body Integer orderId, @OutHeaders Map headers) { <br />... <br />headers.put(&quot;status&quot;, &quot;APPROVED&quot;); <br />headers.put(&quot;confirmId&quot;, &quot;444556&quot;); <br />return &quot;OK&quot;; <br />}</em></p> <p>Camel还提供了利用其他语言的方式,比如XPath,JavaScript,XQuery等等。详见手册。</p> <p>示例如下:</p> <p><em>public Document handleIncomingOrder(@Body Document xml, <br />@XPath(&quot;/order/@customerId&quot;) int customerId, <br />@Bean(ref = &quot;guid&quot;, method=&quot;generate&quot;) int orderId);</em></p>

© 著作权归作者所有

vidy_tu

vidy_tu

粉丝 33
博文 18
码字总数 7631
作品 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 读书笔记 (6)

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

vidy_tu
2013/06/11
1.1K
1
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
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
Apache Camel 2.15.5 发布,规则引擎

Apache Camel 2.15.5 发布,此版本更新内容如下: Bug 修复 [CAMEL-9161] - Camel spring-boot not finding routes when using spring-cloud [CAMEL-9202] - Flatpack: Body reader never c......

淡漠悠然
2015/12/01
1.7K
2

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
82
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
73
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
124
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部