Camelize一个春季启动应用程序

时间:2014-09-10 21:30:58

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

我们有一个弹簧启动应用程序,由于集成需求而变得越来越复杂 - 比如在执行此操作后发送电子邮件,或者在您之后广播jms消息等。在寻找更高级别的抽象时,我遇到了apache骆驼(以前没有使用骆驼)。我的问题是我如何处理spring boot应用程序?该应用程序具有标准弹簧控制器,服务并使用弹簧数据连接到数据库。我没有在网上找到有关如何将camel合并到spring-boot restful应用程序中的大量帮助。这甚至是可行的东西还是骆驼是一个完全不同的野兽,春季靴子不适合?

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

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

  1. 在完成向订单数据库写入任何订单后,我们必须向订单处理部门发送电子邮件
  2. 如果有人删除了某个特定的用户地址,我们必须发送一个jms主题,以便其他应用程序可以采取行动。
  3. 今天每个http请求都是通过Spring MVC堆栈进入的。

    是否可以通过"切换"特定任务完成后对驼峰的处理? (比如通过Spring MVC堆栈成功地将订单写入数据库,然后交给camel发送jms消息并做其他事情)?或者我们应该用Camel完全取代Spring?

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

3 个答案:

答案 0 :(得分:3)

这个问题有点陈旧,但是虽然值得一提的是Apache Camel现在包含一个Spring Boot组件。

详情可在此处找到 http://camel.apache.org/spring-boot.html
他们在这里记录了一个例子 http://camel.apache.org/spring-boot-example.html

按照这个目前的最佳实践,对弹簧靴应用进行骆驼化!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

像其他人提到的那样,spring-boot-camel(但是使用spring-boot-camel-starter作为你的依赖)非常有效并且设置起来非常简单。当你使用@Component注释你的RouteBuilder扩展和你的处理器实现时,它们直接连接到上下文,你很高兴。然后,您可以将CamelContext或ProducerTemplate @Autowire放入您的类中,并在必要时使用它们。

你问过控制器如何使用Camel,如果你@Autowire你需要的任何东西(可能是一个上下文或一个制作人模板),那么答案是明确的"是"你可以很容易地使用它们。当您使用spring-web时,您的上下文将启动并保持运行,无需任何其他配置等。

像马修威尔斯建议的那样,链接会让你指向正确的方向。如果您或您团队中的其他人完全熟悉Camel,那么您将很容易做您需要做的事情。但是,啊,我注意到这个问题是从2014年开始的,你很可能已经超出了你的问题。至少如果其他人停止了这个线程,他们将有大量的信息来开始。如果您过来并重新访问您的问题,请告诉我们您的具体情况以及最终的结果。干杯!