阅读更多
Apache Camel 是一个非常优秀的开源项目,这是一个非常强大的基于规则的路由以及媒介引擎,该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现,你可以采用其异常强大且十分易用的API 来配置其路由或者中介的规则。

Apache Camel 采用URI来描述各种组件,这样你可以很方便地与各种传输或者消息模块进行交互,其中包含的模块有  HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF Bus API。 这些模块是采用可插拔的方式进行工作的。Apache Camel的核心十分小巧你可以很容易地将其集成在各种Java应用中。

JavaEye的资深会员jnn (Willem Jiang,姜宁) 是Apache Camel项目主要维护者之一,他是一位非常优秀的开源项目开发者和支持者,JavaEye非常荣幸的采访了他。

jnn 博客:http://jnn.iteye.com/

Apache Camel  http://camel.apache.org/
FuseSource    http://fusesource.com/
CXF 中文邮件组  http://groups.google.com/group/cxf-zh?hl=zh-CN

欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,发站内短信给JavaEye管理员或者发信到webmaster@iteye.com,谢谢。

采访Apache Camel项目主要维护者之一 jnn Top

JavaEye:1.Hi,jnn,非常荣幸能够采访你,你可以介绍一下自己为什么要加入Apache Camel项目吗?

jnn:这个说起来有点话长,在加入Apache Camel之前, 我做有关Apache CXF的开发快一年的时间了。当时Camel需要和CXF进行集成,于是我就自告奋勇接受了这个任务,参与了Apache Camel的开发。(具体的过程可以参考我的一篇blog:
开源两事记)

JavaEye:2.能介绍一下Apache Camel项目吗? 它的特点,使用的范围,和同类项目比如Mule相比较的优势?

jnn:对于企业应用来说,由于历史或者多厂商等原因造成了其系统之间的通讯协议多样化,而由于企业业务发展,这些应用系统之间交互需求日益增多。Apache Camel可以帮助大家通过定义简单的路由规则来实现不同企业应用之间的互联互通。Apache Camel 把不同的企业应用抽象成为Endpoint, 通过URI来对这些Endpoint 进行描述,由于Apache Camel提供了一个基于POJO的企业应用模式(Enterprise Integration Patterns)的实现,同时Camel提供了60多个组件来负责具体的传输协 议,这样用户可以通过简单的消息路由规则定义,就可以实现各应用系统之间交互。

简单来说如果你有一个应用只提供一个JMS接口, 而你的另一个应用提供 WebServices接口,那你的路由规则可以这么定义:
from("jms://xxxx").to("cxf://xxxx)
【注】Camel通过CXF提供了对WebService的支持。
当然你有可能需要对JMS接口过来的消息做一些处理在转发给WebService应用。
那你只需在两个节点之间要加入一个processor来实现你需要做的处理就行了
from("jms://xxxx").processor(new MyProcessor()).to("cxf://xxxx")

由上面的例子可以看到Camel的路由规则很直观简单,你可以像写Java代码一样定义路由规则。这得益于Camel的创建者 James Strachan(他也是Groovy的创建者)的贡献。

当然Camel还提供了其他方式来描述路由规则, 例如Spring 配置文件, Scala等。

目前市面上有不少的同类开源产品, 例如 Spring Integration, Mule等。

Camel与他们相比有最大的不同就是它十分小巧,而且不会让程序员失去对代码的控制。你可以把它当作一个小的应用库,而不是一个大的运行容器。 这样你可以很轻松 地将其集成到你的Web容器,JBI容器, 或者OSGi容器中。你可以像写Java代码到方式编辑你的路由规则,IDE可以取保你在短时间写出正确 的规则。

还有Camel和Apache ActiveMQ,CXF,ServiceMix有很好的集成,而这些项目都是 企业应用开发经常会接触到的。

JavaEye:3.现在大概有多少用户使用Apache Camel项目。

jnn:这个问题比较难直接回答, 因为 Apache Camel是开源项目,大家可以在不通知我 们的情况下,直接使用, 所以我们没有直接的数据来回答这个问题。现在 camel.apache.org 每天有1~2K的独立IP访问,还有 Apache Camel 的邮件 列表的活跃程度很高,目前排在Apache项目中的第七位http://www.nabble.com/Apache-f90.html

JavaEye:4.Apache Camel 2.0 M3版本刚刚于7月25日发布,2.0正式最终版将在什么什么发布? 2.0版本相比之前的版本有哪些重大改进。

jnn:Apache的Release风格是没有一个具体的时间的, 如果开发者觉得差不多了,就可 以发布。 目前Camel 2.0的开发基本就绪,目前我们正在修复 2.0 M3发布之后发 现的bug,如果顺利的话,2.0版本应该在下个月就能发布了。

Camel2.0 和 Camel 1.x相比我们简化了API的设计,添加了很多新的组件,同时提 供了对OSGi的集成支持, 具体大家可以参考这个链接:http://camel.apache.org/camel-200-release.html

JavaEye:5.Apache Camel项目的roadmap是什么?近期远期的开发计划是什么?

jnn:Apache 项目开发是通过邮件来驱动的,我们没有项目经理来给我们指定具体的 roadmap。很多Feature都是在和用户的邮件讨论中形成的。目前我们规划的还是Camel 2.0部 分的内容http://camel.apache.org/camel-20-design.html,欢迎大家加入Camel需求讨论中来http://www.nabble.com/Camel---Users-f36428.htmlz

JavaEye:6.能否请你介绍一下Apache Camel的支持组件,以及开源产品和Fuse这样商业产品之间的区别吗?

jnn:Camel 支持的组件有ActiveMQ,AMQP,Atom,Bean,Browse,Cometd,CXF 等,所有详细支持的组件请看这个页面: http://camel.apache.org/components.html,这里面还有一些Camel基本概念的介绍 http://jnn.iteye.com/category/27938。我简单给你说一下开源产品和Fuse这样商业产品两者的区别吧:开源软件如果出现问题了,很难得到及时的修正, 因为你很难去推动开发人员去完成你的需求,如果是商业产品, 有一个契约关系, 这样可以保证你的问题能够及时被修正。还有商业产品有一整套的测试发布管理机制,来保证产品质量。 而且我们的Fuse套件是集成了Apache Servicemix, ActiveMQ, CXF , Camel, 它们之间的版本关系是一致的。 而且目前Fuse套件会每个月做一次Release, 比起apache 的release要快很多。还有就是Fuse套件在Apache项目之上还提供了一些扩展的支持, 例如Fuse MR就提供了支持一些商业产品的支持,例如MS Queue, Progress Actiional 等。有Fuse套件本身也是开源的,只是使用的软件许可和Apache的软件许可不同。Apache的软件许可允许你将Apache软件打包到你的商业产品中,你不需要为此付任何费用。Fuse套件不允许你将Fuse套件打包到你的商业产品中, 当然这是出于保护商业利益的角度上来说的。目前Fuse的测试是运行在6个操作系统平台上, 除了包含常规的Unit test, 和Integration Test, 还包含CPI test。这是一般开源软件项目不具备的。还有Fuse套件有专门的CS 支持队伍。

JavaEye:7.请问,你加入Apache Camel项目大概有多长时间了?你主要负责哪部分的开发?

jnn:我是在2007年7月的时候加入 Apache Camel项目开发的, 到现在也有2年的时间了。Apache开源项目的开发比较松散,你可以选择你自己感兴趣的内容工作,很难说哪块代码是由你负责开发的(谁都可以过来修改你的代码  ), 就目前的情况来 说 camel-cxf,camel-osgi 组件的开发和维护的主要工作由我来完成。

JavaEye:8.请问,你平均一周花多长时间在apache camel项目上?你觉得参与这个项目,最大的收获是什么?

jnn:由于我是全职做Apache Camel商业版本的Fuse MR的开发,所以基本上每周要花 20~30小时做与Apache Camel相关的工作,其他时间,我有可能会去做与Fuse相关 的开发支持工作。

参与这个项目的最大收获就是接触到了世界级的开发者,打开了我的眼界,当然也从他们身上学到了不少的东西。

JavaEye:9.你对国内的开发人员参与开源项目的现状有什么评价?你能对希望加入国际开源项目的开发者提一些建议吗?

jnn:去年年底的时候,我参加过Apache在北京组织的一次meet up,就Apache项目的参 与者来说在中国的开发者很少,好像只有我们之外就是Intel参与的Harmony项目的 成员。我曾经写过一篇blog提到国内的开源现状我觉得如果大家想参与国际开源项目的开发,需要转变一个观念,就是我们要真正融入到开源社区中来。

开源的最大好处就是没有代码壁垒, 但是光有免费的代码是不够的, 如果你想用好开源软件,你需要真正融入到开源社区中来, 你可以在这里问问题, 提交 bug,或者补丁, 文档。 其实只要你愿意,就可以加入到国际开源项目开发。

对于在校大学生来说,还有一个途径可以帮助你加入到国际开源项目的开发,就是参加Google举办的Summer of Code。目前Google和各大开源组织都有联系,每年资助几千名世界各地的学生参与开源项目的开发。今年夏天在Apache参加GSoC的中国学生大概有12个人,大概占今年Apache GSoC整个项目人数的三分之一。

JavaEye:10.能介绍Apache Camel的开发团队吗?您目前是通过SOHO的方式工作吗?这种工作方式感觉如何?

jnn:整个团队有4,5个人,查看团队介绍:http://fusesource.com/community/apache-committers-and-fuse/。我们这比较特殊一点, 单位里同事很分散,在不同的地区,大家都在家办公。每个星期有电话会议,通过语音,邮件和其他方式交流。经常在家工作会虽然有孤单感,这是优点也是缺点,还有就是我们和国外的同事有时差, 有时候晚上也得干活, 所以干活和平时的生活分得不是很清楚。不过,现在我家女儿刚3个月, 我很享受在家工作的时间。另外,我们这边同事(前同事)联系还是比较紧密的, 基本上每个礼拜都会聚会一下。

JavaEye:11.你平时和国外的同事都是用英文交流吗?很多程序员技术很好,但是觉得英文太难,你有什么建议吗?

jnn:是的,和国外同事交流几乎是全英文环境。这个就是要多写多练。 其实我们的读写能力还是可以的,就是很少有机会直接和老外面对面的沟通。我刚开始的时候写Email也很痛苦, 一封信得花2个小时左右, 现在写得多了就好很多。目前直接和老外对话到机会还不多, 平时都是使用IRC, 和Email。 所以一定得多练习,当然开始到过程比较困难,只要你能坚持持续的使用,练习英文,练习口语,坚持半年以上,就挺过来,你的英文水平就能有很大的进步。关键要坚持。

JavaEye:12.作为一个JavaEye老会员,你对JavaEye网站有什么建议和意见吗?

jnn:JavaEye目前的受众很大,在业界的影响力也很大。我发现现在的JavaEye除了论坛也开始涉足媒体了,希望网站能够继续保持这个势头,继续成为开发者心目中的最棒的软件开发交流社区。

jnn介绍 Top

jnn (Willem Jiang,姜宁) 目前住在北京, 和其他的开源项目参与者在业余时间参与开源开发相比,他目前是被Progress雇佣专职做开源项目项目开发的,在2006年夏天开始参与Apache CXF的开发,在2007年夏天参与Apache Camel 开发。

除了技术, jnn的爱好有观看美剧,电影, 郊游,羽毛球,有一个三个月大的小女儿,是一位幸福的父亲。

jnn 博客:http://jnn.iteye.com/






  • 大小: 15.2 KB


评论 共 34 条
34 楼 dic_1988 2011-05-30 15:55
33 楼 ziyuewang 2011-05-11 22:47
32 楼 redjini 2011-05-04 08:58
Camel的规则机制实现倒是有些意思,但选用Mina作为通信组件,不知性能如何?
31 楼 阿徽阿徽 2011-05-03 21:45
希望能够超越Apache的开源开发就更棒了,因为我们的确需要自己的一个产品……
30 楼 asianboycn 2010-07-15 10:04
不知道大家有没有看出来。中国在全面西化。
无论是名字。还是写作方式。靠。无语
29 楼 eltonto 2010-07-09 16:27
内容比较少,没看够。。
28 楼 only_xxp 2010-06-10 11:05
支持!!!!
27 楼 yuandaozheng520 2010-03-30 13:21
支持
26 楼 iamliming 2010-02-09 16:35
   强大
25 楼 SINCE1978 2010-02-09 09:31
http://camel.apache.org/camel-210-release.html
从这里无法下载camel2.1.0
请问jnn,esb开源产品众多,如何设计一个测试方案来测试比较各自的执行效率?谢谢。
24 楼 xwangquan 2009-11-25 16:54
看了一下camel的使用场景,Camel视乎不灵活?比如camel与mina的整合,完全遮盖住了mina的优势,对于业务逻辑层,camel使用自己的api包装了mina的handler。camel内部的handler,实现了minahandler 的messagereceived method,但却吞掉了mina  handler的很多接口,比如sessionidle,sessionopened等。在实际的运用中,只实现messagereceived,很明显是不能满足需求的。
不知是我的使用有问题,还是?
有时间交流下
xwangquan@gmail.com
QQ:526054692
23 楼 yin_bp 2009-08-15 13:56
国内很不错的一个轻量级开源框架集bboss,包括持久层框架,aop框架,标签库库
bboss项目下载列表 在sourceforge访问地址为:
https://sourceforge.net/projects/bboss/files/
22 楼 jnn 2009-08-12 21:15
pconline 写道
我们正准备用Camel,到时要请教了

可以说一下你们的应用场景吗?
21 楼 jnn 2009-08-12 21:14
alloyer 写道
呵呵,Willem上头条了

哈,在这碰上你了, 你的Camel GSoc project快做完了吧 :)
20 楼 jnn 2009-08-12 21:13
faylai 写道
好东西啊,以后看文档就方便了,还是中文的好啊!!


看文档最好还是去官方网站
19 楼 jnn 2009-08-12 21:11
guava 写道
什么框架来的?干什么的啊?


如果你想把很多的企业应用整合在一起,可以考虑camel。
18 楼 jnn 2009-08-12 21:10
cy729215495 写道
当我每次下载apache项目,看到里面的源码的时候,真佩服这些人。
java的面向对象的威力是如此的强大!在看自己,整天逃离不了框架的增删改查,
什么时候才能有那种水平?跟我一样想法的人的人应该有很多,希望高手能指点下!


不知道你有没有订阅Camel的邮件列表,每天都有人在问有关Camel使用的问题。如果你试着把这些问题都弄清楚(有时候解决这些问题的最直接的方法就是读代码),你很快就会对Camel有所了解了。这是提高你水平的最直接的途径, 而且没有人会阻止你这么做, 因为代码你可以直接从网上下载到。

这是开源软件最大的魅力之所在, 只要你感兴趣,愿意投入时间和精力,肯定就会有所收获的。
17 楼 lucky16 2009-08-12 17:58
cy729215495 写道
当我每次下载apache项目,看到里面的源码的时候,真佩服这些人。
java的面向对象的威力是如此的强大!在看自己,整天逃离不了框架的增删改查,
什么时候才能有那种水平?跟我一样想法的人的人应该有很多,希望高手能指点下!

赞同啊    

但是对于大多数人来讲我觉得不大现实。不知大家有什么看法?
16 楼 guava 2009-08-12 17:47
什么框架来的?干什么的啊?
15 楼 cy729215495 2009-08-12 13:12
当我每次下载apache项目,看到里面的源码的时候,真佩服这些人。
java的面向对象的威力是如此的强大!在看自己,整天逃离不了框架的增删改查,
什么时候才能有那种水平?跟我一样想法的人的人应该有很多,希望高手能指点下!
14 楼 faylai 2009-08-11 11:40
好东西啊,以后看文档就方便了,还是中文的好啊!!
13 楼 下一站,火星 2009-08-11 09:04
不了解Camel,路过
12 楼 xifo 2009-08-10 21:02
我儿子也才三个来月,我也参加过一段时间的国外开源项目(一个叫OpenCMS的内容管理系统),同道中人,向jnn同志致敬。
11 楼 alloyer 2009-08-10 18:42
呵呵,Willem上头条了
10 楼 lucky16 2009-08-10 13:27
jnn 写道
如果大家对Camel还有啥问题,可以直接在这提问, 我会尽量帮大家回答的。

强大的国人,不解之时肯定来请教,嘻嘻,希望jnn继续好好的做出一些更好的开源项目!
9 楼 sesame 2009-08-10 13:18
强大!国人技术要强大,就要多些像jnn这样的
8 楼 kingrom 2009-08-09 00:45
轮子。。。。
7 楼 gmizr 2009-08-04 13:31
cxf的邮件列表里经常见到
6 楼 pconline 2009-08-03 17:46
我们正准备用Camel,到时要请教了
5 楼 leonmaybe 2009-08-03 17:13
支持。。。。学习....

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • el表达式 获得本页面input文本框值 input text的v

     取页面值为什么要用EL.表达式 你说错了吧. 又不是Aciont值.Jquery取值可以这么写  $('#amount').val()  1,首先在电脑上打开浏览器,打开一个页面。  2、然后按F12进入页面检查的界面,如下图,选中其中的一...

  • (Java)EL表达式获取不到值以及其他问题

    1.EL表达式获取不到值 解决:在确定表达式正确情况下无法获取到数据库的值,可能是没有打开EL表达式。 添加:<%@ page isELIgnored=“false” %>即可使用。 2.javax.el.PropertyNotFoundException:the class ...

  • JSP的EL表达式语言

    1.EL表达式的简介EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。EL的特点:2.获取并显示数据1)从四个域中通过key找到简单数据并显示...

  • EL表达式与JSTL简单入门

    简单来说EL表达式就是让程序员,简化了代码的书写量。在学EL表达式之前我们必须通过<%= %>来取出域中的数据,但这种方式 过于繁琐,所以就诞生了EL表达式。 EL取出JSP四大域...

  • JSP页面获取el表达式里的值

    https://www.cnblogs.com/xuedexin/articles/5671419.html

  • EL表达式和JSTL

    什么是EL表达式 Expression Language(表达式语言) EL的功能 替代JSP页面中访问数据时的复杂编码 执行表达式 EL的特点 自动转换类型 使用简单 EL表达式搜索域数据的顺序 El表达式主要是在jsp页面中输出...

  • JavaWeb学习之EL表达式和JSTL标签库

    EL表达式的格式是:${表达式},EL表达式在输出null值的时候输出的是空串,jsp表达式脚本在输出null值的时候,输出的是null字符串 EL表达式搜索域数据的顺序 EL表达式主要是在jsp页面中输出数据,而主要是输出域对象...

  • JavaWeb之(五)EL表达式

    五、EL表达式 5.1 什么是EL表达式 EL表达式:是指(Expression Language)表达式语言,是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据),在JSP2.0开始引入。 EL表达式的写法(用美元符号“$”...

  • (JSP)EL表达式

    EL表达式是一种在jsp页面静态部分获取数据的简单方式 动态部分为(jsp中的java代码块,jsp动作) 静态部分为(jsp中的html部分) 注意: EL获取的数据,只能从四大域里面获取数据获取,放进域里的代码才能够获取 示例...

  • EL表达式 和JSTL标签

    EL表达式获取数据,会依次从这四个域中寻找,直到找到为止。如果你的El表达式原样输出了,就要在jsp文件中加上。4 application: 当前应用有效。2 request: 当前请求有效。语法:${experssion}3 session:当前会话...

  • JS利用正则表达式替换文本框不符合要求内容(小细节)

    var reg=/[a-z]/ig str=str.replace(reg,'**') } </script> 可能有的人会犯上面的小错误,当输入字母时无法将输入的字符改变成*号,导致的原因是最后一行代码str此时代表的并不是文本框的值,仅仅代表的是刚输入时...

  • EL表达式及JSTL

    提示:文章写完后,目录可以自动生成,如何生成可参考...子属性]} EL表达式支持将运算结果进行输出 EL表达式绝大多数将对象输出是依靠toString()方法 EL表达式通过param输出参数值,例如: 在JSP中新增语句 显示结果为;

  • JSP的EL表达式的使用详解,超详细(一文看懂el)

    JSP的EL表达式的使用详解 一、什么是EL表达式 1.EL表达式的简介 EL表达式百度百科 全称(Expression language)表达语言 El表达式提供了获取对象以及属性的简单方法 2.对比JSP写法和EL表达式写法 JSP写法:<%=...

  • EL表达式与JSTL的常用功能

    EL表达式与JSTL的常用功能 ${EL表达式} 例如${username} .操作符 用来访问对象的属性 ,例如:${news.tile} []操作符 也能用来访问对象的属性,例如:${mews["tirle]}  经验: 1.EL区分大小写 2.使用EL前,必须先将...

  • EL(表达式语言)

    EL(Expression Language,表达式语言)是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的...EL表达式语法很简单,它以“${”开头,以“}”结束,中间为合法的表达式,具体的语法格式如下: ${expr...

  • 在javascript中使用el表达式

    在javascript中使用el表达式,该怎么使用呢?网上有些人还在讨论说javascript是客户端的,el表达式是服务端的,客户端不能使用服务端的东西!纯属扯淡,如果按照这样理解的话,那浏览器是客户端,那浏览器就不能从...

  • EL表达式和JSTL标签的使用

    EL表达式取值和JSTL表达式应用

  • 在javascript中使用el表达式(jsp中的javascript中支持写el表达式,毋庸置疑,单独的js文件中不支持写el表达式,别钻牛角尖)

    哎,够背的,最后4张图怎么调整都很小,看不清楚,所以大家还是看我这篇文章吧在javascript中使用el表达式(图片清晰版,有图有真相),这篇文章的图片可以正常看清楚,跟我这篇文章是一样的内容! 有些文章上说,...

  • JSP之EL表达式

    EL表达式用法 一、首先,弄清楚request对象的getParameter()方法和getAttribute()方法的区别。 getParameter()方法用来接收从前台传来的数据,它根据页面表单组件名称获取页面提交的数据。 例如:registe.jsp页面 ...

  • go 生成基于 graphql 服务器库.zip

    格奇尔根 首页 > 文件 > gqlgen是什么?gqlgen是一个 Go 库,用于轻松构建 GraphQL 服务器。gqlgen 基于 Schema 优先方法— 您可以使用 GraphQL Schema 定义语言来定义您的 API 。gqlgen 优先考虑类型安全— 您永远不应该看到map[string]interface{}这里。gqlgen 启用 Codegen — 我们生成无聊的部分,以便您可以专注于快速构建您的应用程序。还不太确定如何使用gqlgen?将gqlgen与其他 Go graphql实现进行比较快速启动初始化一个新的 go 模块mkdir examplecd examplego mod init example添加github.com/99designs/gqlgen到项目的 tools.goprintf '//go:build tools\npackage tools\nimport (_ "github.com/99designs/gqlgen"\n _ "github.com/99designs/gqlgen

Global site tag (gtag.js) - Google Analytics