【问题标题】:When to use Spring Integration vs. Camel?何时使用 Spring Integration 与 Camel?
【发布时间】:2011-03-03 07:41:23
【问题描述】:

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

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

问题是:您在使用一个堆栈而不是另一个堆栈方面有什么经验?在 Spring Integration 缺乏支持的情况下,您会在哪些情况下推荐 Camel?您在哪里看到每种方法的优缺点?非常感谢来自实际项目的任何建议。

【问题讨论】:

  • 鉴于 Camel 与 Spring 的完美集成,我认为根本没有充分的理由去关注 Spring Integration。 Camel 擅长任何领域:简洁、直观、强大、……有趣。你可以用一行代码完成很多事情,有时我会因为没有编写足够的代码来证明功能的合理性而感到内疚。

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


【解决方案1】:

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

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

我们发现编辑-编译-调试周期减少了。使用 groovy 来试验设置路线是额外的好处。

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

【讨论】:

  • 感谢Peter分享你的观点,你有没有尝试过使用Camel的JMS能力,看起来各个组件也很灵活,和Spring Integration一样丰富?您所说的“小规模枪战”是指更好的性能数字?
  • 枪战:主要是开发人员的表现。我们的性能需求不是很高。是的,我们使用很多 JMS 作为基础。 ActiveMQ 和 JBossMQ 都用于消息传递。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    向我们传达您的担忧

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

    干杯 奥列格

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

    【讨论】:

      【解决方案4】:

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

      Apache Camel 有两个主要优点:

      1. 支持很多很多的技术。
      2. 除了(好的)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?

      【讨论】:

        【解决方案5】:

        使用 Camel over Spring Integration 的一个原因是当您需要功能更强大的 EIP 集时。 Spring Integration 不提供对 ThreadPool 等事物的抽象。

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

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

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

        【讨论】:

        【解决方案6】:

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

        【讨论】:

        • Camel 对 Spring 的支持确实很棒,涵盖了很多第三方组件。
        【解决方案7】:

        我见过的大多数骆驼和 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 支持以及更多功能引入弹簧集成。

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

        供您参考,

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

        【讨论】:

        【解决方案8】:

        我最近进行了 Camel 与 Spring 集成的枪战,目的是集成 Apache Kafka。尽管是一名狂热的 Spring 开发人员,但我遗憾地发现我对 Spring 不断增长的项目堆栈的怀疑得到了证实:Spring 作为 IOC-Container 可以作为其他框架的粘合剂,但它未能提供可行的替代方案 那些框架。这可能有例外,即与 MVC 相关的所有事情,Spring 来自哪里以及它在哪里做得很好,但其他尝试在容器特性之上提供新功能的尝试因三个原因而失败SI Kafka 用例证实了所有这些:

        • 介绍用于 XML 配置的冗长难以使用的 DSL。
        • xml 配置代码页面,用于连接所有框架组件。
        • 缺少提供与专用框架同等功能的资源。

        现在,回到我的点球大战的结果:最重要的是,Camels 端点之间的路线的整体概念给我留下了深刻的印象。 Kafka 与此概念无缝集成,三行配置足以让一切正常运行。在此过程中遇到的问题ample documentation from the project team 以及 Stackoverflow 上的很多问题都巧妙地解决了。最后但并非最不重要的一点是,全面集成到 Spring,让所有愿望都实现了。

        与SI相反,Kafka集成的文档是quite intense,仍然没有清楚地解释如何集成Kafka。 Kafka 的集成到了 SI 做事方式中,这增加了额外的复杂性。其他文件,例如Stackoverflow 上的内容也没有 Camel 丰富,也没有那么有用。

        我的结论:cobbler 坚持你的行业——使用 Spring 作为容器,使用 Camel 作为系统集成框架。

        【讨论】:

        • 感谢弗里茨分享您的经验!我完全同意您的意见:Camel 在其基本概念方面非常干净,并为手头的许多任务提供了一个可行组件的生态系统(如果您想自定义特定的例程,则可以轻松加入)。
        【解决方案9】:

        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 进行配置。我在我的新项目中使用它,感觉更加可读和清晰。我希望这个反思可以帮助您进行评估。

        【讨论】:

          【解决方案10】:

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

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

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

          我现在正在处理使用 Apache Camel 处理异常和事务的问题,Spring 似乎在 AOP 中处理得更好。

          【讨论】:

          • 是否有任何错误配置导致 IBM MQ 中打开空闲连接。
          【解决方案11】:

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

          【讨论】:

            猜你喜欢
            • 2014-02-17
            • 1970-01-01
            • 2021-05-29
            • 1970-01-01
            • 1970-01-01
            • 2018-08-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多