何时使用Spring Integration与Camel?

作为一位经验丰富的Spring用户,我认为Spring Integration最适合需要某些(JMS)消息传递function( 更多详细信息 )的项目。 经过一段时间的工作与Spring集成,它仍然感觉像很多configuration的开销,给定的渠道,你必须configuration一些请求 – 响应(监听不同的JMS队列)通信。

因此,我正在寻找一些背景信息,骆驼是如何不同于spring集成,但似乎有信息是非常有余地,我发现:

  • http://java.dzone.com/articles/spring-integration-and-apache (自2009年12月起,在Spring Integration和Camel之间实现真实世界的集成场景非常中立)
  • http://hillert.blogspot.com/2009/10/apache-camel-alternatives.html (比较骆驼与其他解决scheme,2009年10月)
  • http://raibledesigns.com/rd/entry/taking_apache_camel_for_a(Matt Raible,2008年10月)

问题是:你在使用这个堆栈的时候有什么经验? 在哪种情况下,你会推荐Camel的Spring Integration缺乏支持? 你在哪里看到每个的利弊? 任何意见来自现实世界的项目,高度赞赏。

我们select骆驼而不是Spring-Integration,因为stream畅的API真的很好。 我们实际上在Spring项目中使用它,并使用Spring来configuration它的一部分。 编程API是清晰的,有一大堆的明智的组件。

我们做了一个小规模的枪战,基本上在那个时候我们要求骆驼赢了。 我们主要使用它来将内部数据文件传输到/从外部各方,通常需要格式转换发送使用ftp / sftp / …或附加到电子邮件发送出去。

我们发现编辑 – 编译 – debugging周期减less了。 使用groovy来设定路线是增加奖金。

Spring-Integration也是一个很棒的产品,我相信它也能满足我们的需求。

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

Apache Camel有两个主要的优点:

  1. 支持许多更多的技术。
  2. 另外,(良好的)XML DSL,还有stream畅的Java,Groovy和Scala API。

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

如果你需要更多的细节,你可以在我的博客文章中阅读我的经验: 被select的东西:使用哪个集成框架 – Spring Integration,Mule ESB或Apache Camel?

我最近进行了一个骆驼与spring集成射击,目的是整合Apache Kafka 。 尽pipe我是一名狂热的Spring开发人员,但我不幸地发现我对Spring的日益增长的项目堆栈的怀疑: Spring作为IOC-Container作为其他框架的粘合剂是非常棒的,但是它无法这些框架提供可行的替代scheme 。 这可能是有例外的,也就是所有与MVC有关的事情,Spring从哪里来,在哪里做得很好,但是其他一些在容器function上提供新function的尝试都有三个原因SI卡夫卡用例确认他们全部:

  • 一个冗长的难以使用DSL的XMLconfiguration介绍。
  • xmlconfiguration代码的页面来获取所有的框架组件。
  • 缺less资源来提供与专用框架相同的function。

现在回到我的拍摄结果:最重要的是,我对骆驼在终点之间路线的整体概念印象深刻。 卡夫卡与这个概念无缝地结合在一起,三行configuration足以让所有的东西都能正常运行。 在这个过程中遇到的问题可以通过项目团队的大量文档以及很多关于Stackoverflow的问题来解决。 最后但并非最不重要的一点是, 春季全面整合并没有实现任何愿望。

与SI相反,卡夫卡整合的文档相当激烈 ,仍然没有解释如何整合卡夫卡。 卡夫卡的整合被入SI方式,增加了额外的复杂性。 其他文档,例如在Stackoverflow上也比骆驼less,而且帮助不大。

我的结论是:鞋匠坚持你的交易 – 使用Spring作为容器,骆驼作为系统集成框架。

我真的要看你想做什么 如果您需要扩展某些内容来构build您自己的消息传递解决scheme,Spring Integration具有更好的编程模型。 如果你需要一些支持很多协议而没有自定义代码的东西,Camel比Spring Integration更有优势。

进行小规模的枪战是一个非常好的主意,只要确保你正在尝试做你通常在项目中做的事情。

– 免责声明:我是Spring集成提交者

我所看到的骆驼和SI的大多数比较没有考虑到以下内容:

1.)Spring Boot对Spring集成开发人员生产力的影响

2.)Spring XD的作用是使得Spring Integration应用程序可以在没有代码编译的情况下使用 – 当你想要扩展Spring XD的时候,Spring XD的源和汇也只是Spring集成通道适配器。

3.)Spring XD的作用是将Spring Integration,Spring Batch,Spring Data(+ Hadoop!)统一在一个堆栈中,有效地将批处理和stream处理,HDFS / Apache Hadoop支持等function引入到Spring Integration中。

4.)即将发布的Spring Integration 4.0 Java DSL的影响https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

为了您的考虑,

/ Pieter(免责声明我在Pivotal工作)

实际上,我认为FTP已经逐渐成长。 您可以在SI论坛/ JIRA上进行简单的search,查看已实施的新function和修复的错误。 从各种喋喋不休,似乎已经有一些生产用法,所以我build议给它第二次看,当然,通过您的问题通过我们通过

http://forum.springsource.org/forumdisplay.php?42-Integration
https://jira.springsource.org/browse/INT

干杯奥列格

免责声明:我是Spring集成提交者

我们正在为我们的应用程序使用Spring Integration,现在正考虑迁移到Apache Camel,因为我们遇到了许多Spring Integration框架的问题。 这里有几个问题。

  1. Spring提供的CachingConnectionFactory在IBM MQ中打开了1000个空闲连接,并不保证这些连接被重用。 而且这些连接将永远保持开放,从而在MQ方面造成麻烦。 为了刷新连接,必须每周在较低的环境中重新启动应用程序。 Apache Camel也提供caching,连接似乎根据负载上升/下降。

  2. Spring不提供QoS参数的映射器。 即使启用了QoS,交付模式和过期/时间属性也会丢失(我将为此提出一个JIRA问题)。 Apache Camel处理这一点,QoS参数被发送到上游应用程序,而不是丢弃它。

我现在正在处理Apache Spring的exception和事务处理方面的问题,Spring看起来可以更好地处理AOP。

在Spring集成上使用Camel的一个原因是当你需要一个更有特色的EIP集。 Spring Integration不提供对诸如ThreadPool之类的东西的抽象。

骆驼确实提供了额外的构造,以简化使用并发代码的一些方面:

http://camel.apache.org/camel-23-threadpool-configuration.html

如果你不需要这样的事情,只想连接文件,JMS,FTP端点等等,那么就使用Spring Integration。

Apache Camel是一个非常好的框架,非常完整,但如果你的应用程序使用spring,我个人的build议是恢复到spring集成。 Spring Integration是Spring-Source生态系统的整合EIP投诉框架。 它与生态系统有很好的集成:Spring引导,Batch,XD,甚至是核心都使用了从Spring Framework 4开始的同样的抽象,一些消息抽象被移动到了框架中,作为Spring Integration的基本消息抽象强大的,现在Spring框架实例使用Spring Web的消息传递抽象,Web套接字支持。 Spring集成中使用Apache Camel的Spring应用程序中的另一件好事是,使用Spring集成,只能使用一个Application Contecxt。 记住骆驼上下文是一个Spring上下文。 如果您有幸使用了新的Spring版本,我可以build议使用Spring Integration java dsl进行configuration。 我在新项目中使用它,我感觉更清晰可读。

我希望这反映可以帮助你的评价

如果您当前的应用程序是在Spring中,并且需要Spring集成EIP支持的function,那么Spring Integration是最好的select,否则需要更多的第三方支持/协议/文件格式等