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.javaeye.com/
Apache Camel http://camel.apache.org/
FuseSource http://fusesource.com/
CXF 中文邮件组 http://groups.google.com/group/cxf-zh?hl=zh-CN
欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,发站内短信给JavaEye管理员或者发信到webmaster@javaeye.com,谢谢。
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.javaeye.com/
Apache Camel http://camel.apache.org/
FuseSource http://fusesource.com/
CXF 中文邮件组 http://groups.google.com/group/cxf-zh?hl=zh-CN
欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,发站内短信给JavaEye管理员或者发信到webmaster@javaeye.com,谢谢。
采访Apache Camel项目主要维护者之一 jnn
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.javaeye.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:这个说起来有点话长,在加入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.javaeye.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除了论坛也开始涉足媒体了,希望网站能够继续保持这个势头,继续成为开发者心目中的最棒的软件开发交流社区。
安徽新华电脑学校专业职业规划师为你提供更多帮助【在线咨询】