什么时候使用Spring Integration vs.Camel?


138

作为经验丰富的Spring用户,我以为Spring Integration在需要一些(JMS)消息传递功能(更多详细信息)的最新项目中最有意义。在使用Spring Integration工作了几天之后,考虑到要配置一些请求-响应(侦听不同的JMS队列)通信所必须配置的通道数量,仍然感觉到很多配置开销。

因此,我一直在寻找一些Camel与Spring Integration有何不同的背景信息,但是似乎那里的信息还很多余,我发现:

问题是:您在使用一个堆栈而不是另一个堆栈时获得了哪些经验?在哪种情况下,您会建议Camel缺少Spring Integration支持?您在哪里看到各自的优缺点?来自现实世界项目的任何建议都将受到高度赞赏。


4
鉴于Camel与Spring的整合绝对出色,我什至没有充分的理由去研究Spring Integration。骆驼在任何方面都擅长:简洁,直观,功能强大,...有趣。您可以用一行代码来完成很多工作,有时我因没有编写足够的代码来证明其功能而感到内gui。
帕维尔·莱切夫

Answers:


75

我们选择Camel而不是Spring-Integration,因为流畅的API确实很棒。我们实际上在Spring项目中使用它,并使用Spring来配置它的一部分。编程API很清晰,并且有大量明智的组件。

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

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

Spring-Integration也是一个很棒的产品,我很确定它也可以满足我们的需求。


1
感谢Peter分享您的观点,您是否尝试过使用Camel的JMS功能,似乎各个组件也都非常灵活,并且具有与Spring Integration相同的丰富性?通过“小规模枪战”,您指的是更好的性能数字?
ngeek 2010年

1
点球大战:主要是开发人员的表现。我们的性能需求不是很高。是的,我们使用了大量的JMS作为基础。ActiveMQ和JBossMQ都用于消息传递。
彼得·蒂勒曼斯


67

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

Apache Camel具有两个主要优点:

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

因为Apache Camel与Spring的集成非常好,所以我什至会在大多数Spring项目中使用它来代替Spring Integration。

如果您需要更多详细信息,请阅读我的博客文章:被宠坏的选择:使用哪种集成框架– Spring Integration,Mule ESB或Apache Camel?


31

我最近进行了Camel vs Spring集成大战,旨在集成Apache Kafka。尽管是一名狂热的Spring开发人员,但我对Spring不断增长的Project堆栈感到怀疑,这证实了我的怀疑:作为IOC-Container用作其他框架的粘合剂,Spring很棒,但是它无法那些框架提供可行的替代方案。可能会有例外,即与MVC有关的一切,Spring来自何处以及在何处发挥出色,但由于三个原因,其他尝试在容器功能之上提供新功能的尝试均未能实现,SI Kafka用例证实了这一点。他们全部:

  • 引入了难以使用的DSL进行XML配置。
  • xml配置代码页面,用于连接所有框架组件。
  • 缺少提供与专用框架相当的功能的资源。

现在,回到枪战的结果:最重要的是,我对Camels 端点之间路由的整体概念印象深刻。Kafka与该概念无缝集成,三行配置足以使一切正常运行。项目团队大量文档可以很好地解决在此过程中遇到的问题,以及有关Stackoverflow的很多问题。最后但并非最不重要的一点是,Spring进行全面集成,没有遗漏任何未实现的愿望。

相反,对于SI,Kafka集成的文档非常丰富,仍然无法清楚地说明如何集成Kafka。Kafka的集成被入服务器的SI方式,这增加了额外的复杂性。其他文档,例如有关Stackoverflow的文档,也比骆驼的文档少,帮助也小。

我的结论是:补鞋匠坚持不懈地工作-使用Spring作为容器,使用Camel作为系统集成框架。


3
谢谢,弗里茨,分享您的经验!我全心全意地同意您的看法:骆驼在基本概念上非常干净,并为手头上的许多任务提供了可行组件的生态系统(如果您要自定义特定的例程,则可以轻松进行连接)。
ngeek 2015年

15

这实际上取决于您要做什么。如果您需要扩展某些内容来构建自己的消息传递解决方案,Spring Integration会提供更好的编程模型。如果您需要一些无需自定义代码即可支持许多协议的产品,那么Camel领先于Spring Integration。

进行小规模的枪战是一个很好的主意,只需确保要尝试完成项目中通常要执行的操作即可。

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


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 Integration 4.0 Java DSL的效果https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference

为了您的考虑,

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


3
在考虑Java DSL之前,需要进行大量工作,甚至需要更多文档。
cuttcards 2015年

它被释放,现在一段时间... spring.io/blog/2014/11/24/...
彼得Szanto

6

我们正在将Spring Integration用于我们的应用程序,现在考虑到Spring Integration框架遇到的许多问题,因此考虑迁移到Apache Camel。这是几个问题。

  1. Spring提供的CachingConnectionFactory在IBM MQ中打开了1000个空闲连接,并且不能保证这些连接被重用。而且这些连接将永远保持打开状态,这会在MQ端造成麻烦。每周必须在较低的环境中重新启动应用程序,以刷新连接。Apache Camel还提供了缓存功能,连接似乎根据负载而增加/减少。

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

我现在正在处理与Apache Camel一起处理异常和事务的问题,Spring似乎在AOP上可以更好地处理它。


是否存在任何导致IBM MQ中打开空闲连接的错误配置。
Harpreet Sandhu-TheRootCoder

4

实际上,我想说FTP已经结束了它的潜伏期。您可以在SI论坛/ JIRA上进行简单搜索,以查看实现了哪些新功能以及已修复的错误。从各式各样的ter不休中看来,已经有一些生产用途了,所以我建议您再看一下它,当然可以通过

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

干杯奥列格

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


4

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

Spring Integration是Spring-Source生态系统的集成EIP投诉框架。它与生态系统具有出色的集成:Spring Boot,Batch,XD;从Spring框架4开始,甚至内核也使用相同的抽象。一些消息传递抽象已在框架中移动,以证明Spring Integration的基本消息传递抽象非常强大。现在,例如,Spring框架将消息传递抽象用于Spring Web,Web套接字支持。

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


1

在Spring Integration上使用Camel的一个原因是,当您需要功能更强大的EIP集时。Spring Integration不提供诸如ThreadPool之类的抽象。

Camel确实为此提供了其他构造,从而简化了使用并发代码的某些方面:

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

如果您不需要这种东西,而只想连接文件,JMS,FTP端点等,则只需使用Spring Integration。


2
您确实对Spring中的SI轮询器和任务执行器中的ThreadPools有了抽象。不过,您没有在SI中为OOTB预先配置任何内容。看到这里配置的任务执行: static.springsource.org/spring-integration/docs/2.1.x/reference/...
cwash

@Jon,您能看看我在JMS上的帖子吗?
学习者

-1

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


-3

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


Camel对Spring确实有很好的支持,并涵盖了许多第三方组件。
MikeHoss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.