何时使用Spring Integration vs. Camel?

问题

作为一名经验丰富的Spring用户,我假设Spring Integration在最近需要一些(JMS)消息传递功能的项目(more details)中最有意义。使用Spring Integration几天后,考虑到必须配置的通道数量,以便在适当的位置进行一些请求 - 响应(侦听不同的JMS队列)通信,它仍然会感觉很多配置开销。

因此,我正在寻找一些背景信息Camel与Spring Integration的不同之处,但似乎有很多信息,我发现:

  • http://java.dzone.com/articles/spring-integration-and-apache(从2009年12月开始,在Spring Integration与Camel中实现真实集成场景之间的非常中性比较)
  • http://hillert.blogspot.com/2009/10/apache-camel-alternatives.html(将Camel与其他解决方案进行比较,2009年10月)
  • http://raibledesigns.com/rd/entry/taking_apache_camel_for_a(Matt Raible,2008年10月)

问题是:你使用一个堆栈而不是另一个堆栈有什么经验?在哪些情况下你会推荐Camel是Spring Integration缺乏支持吗?你在哪里看到每个人的利弊?任何来自现实世界项目的建议都受到高度赞赏。


#1 热门回答(61 赞)

我们选择Camel而不是Spring-Integration,因为流畅的API非常好。我们实际上在Spring项目中使用它并使用Spring来配置它的一部分。编程API很清晰,有很多合理的组件。

我们做了小规模的枪战,基本上当时我们要求Camel赢了。我们主要使用它来向外部方传输内部数据文件,这通常需要格式转换,使用ftp / sftp / ...发送它或将其附加到电子邮件并发送出去。

我们发现编辑 - 编译 - 调试周期减少了。使用groovy来实验设置路线是增加奖金。

Spring-Integration也是一款出色的产品,我相信它也能满足我们的需求。


#2 热门回答(58 赞)

我只推荐Spring Integration,如果你已经有一个Spring项目,你只需要使用File,FTP,JMS,JDBC等添加一些"基本"集成。

Apache Camel有两个主要优点:

  • 支持许多更多技术。
  • 此外,还有一个(好的)XML DSL,有流畅的Java,Groovy和Scala API。

因为Apache Camel与Spring有很好的集成,所以如果在大多数Spring项目中使用Spring Integration,我甚至会使用它。

如果你需要更多详细信息,可以在我的博客文章中阅读我的经验:Spoilt for Choice: Which Integration Framework to use – Spring Integration, Mule ESB or Apache Camel?


#3 热门回答(21 赞)

我最近进行了一次Camel vs Spring Integration的拍摄,目的是整合Apache Kafka。尽管是一个狂热的Spring开发人员,但我遗憾地发现我对Spring不断增长的Project堆栈的怀疑证实:Spring很棒,因为IOC-Container可以作为其他框架的粘合剂,但它无法提供可行的替代框架。可能有一些例外,即与MVC有关的一切,其中Spring来自哪里以及哪里做得很好,但是其他尝试在容器功能之上提供新功能的原因不足以实现**和SI Kafka用例确认全部他们:

  • 介绍一种长篇难以使用的DSL用于XML配置。
  • 用于获取所有框架组件的xml配置代码页。
  • 缺少资源以提供与专用框架相同的功能。

现在,回到我的枪战结果:最重要的是我对Camels在端点之间的整体概念留下了深刻的印象.Kafka无缝地集成了这个概念,三行配置足以让一切正常运行。在过程中遇到的问题由ample documentation from the project team以及Stackoverflow上的许多问题得到了很好的解决。最后但并非最不重要的是,有一个全面整合到Spring中,没有任何愿望未实现。

与SI相反,Kafka集成的文档是quite intense,仍然无法清楚地解释如何集成Kafka。 Kafka的整合被压缩为SI方式,这增加了额外的复杂性。其他文件,例如在Stackoverflow上,与Camel相比,它也不那么丰富,也没那么有用。
我的结论:鞋匠坚持你的交易 - 使用Spring作为容器,使用Camel作为系统集成框架。