何时使用Spring Integration vs. Camel?

nge*_*eek 127 java messaging jms apache-camel spring-integration

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

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

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

Pet*_*ans 66

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

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

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

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


Kai*_*ner 61

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

Apache Camel有两个主要优点:

  1. 支持许多更多技术.
  2. 此外,还有一个(优秀的)XML DSL,有流畅的Java,Groovy和Scala API.

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

如果您需要更多详细信息,可以在我的博客文章中阅读我的经验:为选择而破坏:使用哪种集成框架 - Spring Integration,Mule ESB或Apache Camel?


Fri*_*rdt 26

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

  • 介绍一种长篇难以使用的DSL用于XML配置.
  • xml配置代码页面,用于将所有框架组件连接起来.
  • 缺少资源以提供与专用框架相同的功能.

现在,回到我的枪战结果:最重要的是,我对Camels 端点之间路线的整体概念印象深刻.Kafka与这一概念无缝集成,三条配置足以让一切运行正常.项目团队提供大量文档以及Stackoverflow上的大量问题都巧妙地解决了整个过程中遇到的问题.最后但并非最不重要的是,有一个全面的融入Spring,没有任何愿望未实现.

与SI相反,Kafka集成的文档非常激烈,仍然无法清楚地解释如何集成Kafka.Kafka的整合被入SI的做事方式,这增加了额外的复杂性.其他文档,例如Stackoverflow上的文档也比Camel更少,也没那么有用.

我的结论:鞋匠坚持你的交易 - 使用Spring作为容器,使用Camel作为系统集成框架.

  • 谢谢,弗里茨,分享你的经验!我完全赞同你的观察:Camel对于它的基本概念非常干净,并为手头的许多任务提供可行组件的生态系统(如果你想定制特定的例程,则可以轻松地挂钩). (3认同)

iwe*_*ein 14

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

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

--disclaimer:我是一个Spring Integration提交者


Piv*_*ter 9

我见过的大多数Camel和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集成4.0的Java DSL的效果https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

供您考虑

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

  • Java DSL在需要考虑之前需要大量的工作和更多的文档. (3认同)

Val*_*udi 5

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 集成,您只能使用一个应用程序上下文。请记住,Camel 上下文是 Spring 上下文。如果您有机会使用新的 Spring 版本,我建议使用 Spring Integration Java DSL 进行配置。我在我的新项目中使用它,感觉更具可读性和清晰性。我希望这篇反思能够对您的评估有所帮助。


小智 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参数发送到上游应用程序而不是丢弃它.

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