【问题标题】:Camelize a spring boot applicationCamelize 一个 Spring Boot 应用程序
【发布时间】:2014-11-04 16:37:20
【问题描述】:

我们有一个 Spring Boot 应用程序,由于集成需求而变得越来越复杂——比如在你这样做之后发送电子邮件,或者在你这样做之后广播一条 jms 消息等。在寻找一些更高级别的抽象时,我遇到了 apache骆驼(以前从未使用过骆驼)。我的问题是我如何处理 Spring Boot 应用程序?该应用程序具有标准的 spring 控制器、服务并使用 spring-data 连接到数据库。我在网上没有找到太多关于如何将骆驼合并到 spring-boot 宁静应用程序中的帮助。这甚至是可行的还是骆驼是弹簧靴不适合的完全不同的野兽?

我确实读过 Camel 与 Spring 紧密集成,但我仍然不知道 1)Spring 控制器仍然可以与 Camel 一起使用 2)我是否可以从骆驼路由调用其他 Spring bean 以及是否我可以调用从 spring bean 调用骆驼路线(对不起,如果这些听起来像专家的骆驼新手问题)

作为我们必须做的一个例子:

  1. 在完成向数据库写入有关订单的任何内容后,我们必须向订单处理部门发送一封电子邮件
  2. 如果有人删除了特定用户地址,我们必须发送到 jms 主题,以便其他应用程序可以采取行动。

今天每个 http 请求都通过 Spring MVC 堆栈进入。

有没有办法在特定任务完成后将处理“移交”给骆驼? (比如通过 Spring MVC 堆栈成功将订单写入数据库并交给骆驼发送 jms 消息并做其他事情)?还是我们应该用 Camel 完全取代 Spring?

不确定正确的路径是什么。有人可以指导我们吗?

【问题讨论】:

  • 虽然您可能能够让 Apache Camel 与 Spring Boot 一起工作,但您也可能想尝试 Spring Integration,它涵盖与 Apache Camel 相同的内容。优点是Spring Boot已经支持了。
  • 我有一个集成了 Spring Boot 的 Apache Camel 应用程序。效果很好。
  • @MattRaible - 你能分享更多细节吗?你是完全使用 Spring 的 rest 控制器还是一切都通过 Camel 完成?你如何从spring boot到camel and back?如果您能分享更多细节,我们将不胜感激。
  • 一切都是通过骆驼完成的。我没有任何 Spring 控制器,只有由 CXF 和 Camel 提供支持的 SOAP 服务。 Camel 和所有 Spring 组件都使用 JavaConfig 配置 - 没有 XML。
  • 我今天写了一篇关于将 Spring Boot 集成到我们的 Camel 项目中的博文。希望能帮助到你! raibledesigns.com/rd/entry/…

标签: spring spring-mvc apache-camel spring-boot


【解决方案1】:

像其他人提到的那样,spring-boot-camel(但使用 spring-boot-camel-starter 作为您的依赖项)工作得非常好,而且设置起来非常容易。当您使用 @Component 注释 RouteBuilder 扩展和处理器实现时,它们会直接连接到上下文中,您就可以开始了。然后,您可以将 CamelContext 或 ProducerTemplate @Autowire 加入到您的类中,并根据需要使用它们。

您询问了控制器如何与 Camel 一起使用,如果您 @Autowire 任何您需要的东西(可能是上下文或生产者模板),那么答案是肯定的“是”,您可以将它们完全一起使用容易地。当您使用 spring-web 时,您的上下文将启动并保持运行,无需任何额外配置等。

就像 Matthew Wells 建议的那样,这些链接会让您指向正确的方向。如果您或您团队中的其他人完全熟悉 Camel,那么您将很容易做您需要做的事情。但是,啊,我注意到这个问题是从 2014 年开始的,你可能已经超出了你的问题的重点。至少如果其他人在这个线程上停下来,他们将有大量的信息可以开始。如果您再次访问您的问题,请让我们知道它对您有何影响,以及您最终做了什么。干杯!

【讨论】:

    【解决方案2】:

    这个问题有点老了,但在这里值得一提的是 Apache Camel 现在包含一个 Spring Boot 组件。

    详情请看这里
    http://camel.apache.org/spring-boot.html
    他们在这里记录了一个例子
    http://camel.apache.org/spring-boot-example.html

    按照这个来了解当前在骆驼化 Spring Boot 应用程序方面的最佳实践!

    【讨论】:

      【解决方案3】:

      一种选择是
      1> 在 Spring DSL 或 Java DSL 或其他方式中定义骆驼路由,并在 Spring Application 上下文中定义它。
      2>并有一个实现ApplicationContextAware的类,并将Spring ApplicationContext缓存在一个静态变量中。
      3> 对于@Controller,我们可以获得这个静态变量并获取 ApplicationContext 。
      4> 使用骆驼上下文 ID,我们可以从 ApplicationContext 中获取一个 getBean。
      5> 这是 DefaultCamelContext 的实例,通过它我们可以做一个 createProducer 并从 @Controller 调用骆驼路由。

      【讨论】:

        猜你喜欢
        • 2015-08-20
        • 2015-11-25
        • 2018-08-28
        • 2017-09-19
        • 2017-09-01
        • 2019-12-18
        • 2016-05-25
        • 2018-12-11
        相关资源
        最近更新 更多