何时使用Spring Integration vs. Camel?

时间:2010-06-13 21:45:43

标签: java jms messaging apache-camel spring-integration

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

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

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

11 个答案:

答案 0 :(得分:65)

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

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

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

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

答案 1 :(得分:61)

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

Apache Camel有两个主要优点:

  1. 支持许多更多技术。
  2. 此外,还有一个(优秀的)XML DSL,有流畅的Java,Groovy和Scala API。
  3. 因为Apache Camel与Spring有很好的集成,所以如果在大多数Spring项目中使用Spring Integration,我甚至会使用它。

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

答案 2 :(得分:25)

我最近进行了一场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作为系统集成框架。

答案 3 :(得分:14)

我真的要看你想做什么。如果您需要扩展一些东西来构建自己的消息传递解决方案Spring Integration具有更好的编程模型。如果你需要支持许多协议而没有自定义代码的东西,Camel领先于Spring Integration。

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

- 免责声明:我是Spring Integration提交者

答案 4 :(得分:9)

我见过的骆驼和SI的大多数比较都没有考虑以下因素:

1。)Spring Boot对Spring Integration的开发人员生产力的影响

2。)Spring XD的作用是使Spring Integration应用程序无法进行代码编译 - 当你想要扩展Spring XD时,Spring XD源代码和接收器只是Spring Integration通道适配器。

3。)Spring XD的效果在于将Spring Integration,Spring Batch,Spring Data(+ Hadoop!)统一在一个堆栈中,有效地实现了批处理和流处理,HDFS / Apache Hadoop支持等等。 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工作)

答案 5 :(得分:5)

我们正在为我们的应用程序使用Spring Integration,现在考虑转向Apache Camel,因为我们遇到了很多Spring Integration框架的问题。以下是几个问题。

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

  2. Spring没有提供QoS参数的映射器。即使您启用了QoS,传递模式和到期/ timetolive属性也会丢失(我将为此提出JIRA问题)。 Apache Camel处理此问题,并将QoS参数发送到上游应用程序而不是丢弃它。

  3. 我现在正处理使用Apache Camel处理异常和事务的问题,Spring似乎可以更好地处理AOP。

答案 6 :(得分:3)

实际上,我会说FTP已经毕业了潜伏期。您可以在SI论坛/ JIRA上进行简单搜索,以查看实现了哪些新功能以及修复的错误。从各种聊天中看起来似乎已经有了一些生产用途,所以我建议再给它一次,当然通过

告诉我们你的问题

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

干杯 奥列格

免责声明:我是Spring Integration提交者

答案 7 :(得分:2)

Apache Camel是一个非常好的框架,也非常完整。但是,如果您的应用程序使用spring,我的个人建议是使用Spring Integration。

Spring Integration是Spring-Source生态系统的集成EIP投诉框架。它与生态系统有很好的集成:Spring boot,Batch,XD;甚至核心也使用从Spring Framework 4开始的相同抽象。一些消息传递抽象被移植到框架中,作为Spring Integration的基本消息传递抽象非常强大的证明。现在,Spring框架使用Spring Web的消息传递抽象,Web套接字支持。

使用Spring集成的Spring应用程序中使用Apache Camel的另一个好处是,使用Spring集成,您只能使用一个Application Context。请记住,Camel Context是一个Spring上下文。如果您有机会使用新的Spring版本,我建议使用Spring Integration Java DSL进行配置。我在我的新项目中使用它,感觉更清晰可读。我希望这种反思可以帮助你进行评估。

答案 8 :(得分:1)

使用Camel而不是Spring Integration的一个原因是当你需要一个功能更强大的EIP集时。 Spring Integration不提供ThreadPool等内容的抽象。

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

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

如果你不需要这种东西,只想连接文件,JMS,FTP端点等......那么只需使用Spring Integration。

答案 9 :(得分:0)

骆驼充当应用程序的中间件,可以在其中执行数据建模,消息值转换和消息编排。

答案 10 :(得分:-3)

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