如何针对特定场景正确使用Apache Camel?

时间:2012-11-26 16:19:40

标签: java asynchronous apache-camel internal

问题概述

我使用apache camel 2.4并被要求在我们的一个maven / spring项目中设置内部消息系统。这可能看起来有点奇怪,但是因为他们计划在以后将某些功能分开,并且希望已经涵盖整合方面。

所需功能

基本上我有一个bean(A)进行一些处理并创建一个可序列化的对象。我有另一个bean(B)接受所述可序列化对象,并进行一些我们想要异步发生的额外处理。

计划是让bean(A)通过Camel的SEDA组件生成一条消息,并让它在内部被bean(B)使用。

我做了什么

到目前为止,我已经实现了这个;

- 创建定义路径的RouteBuilder实现。

- 在Spring中配置我的CamelContext以使用所述路由构建器。

- 创建"制作人"将CamelContext作为属性的类,并使用它来创建用于发送消息的ProducerTemplate。 - 由bean(A)使用。

- 定义bean(B)作为使用者(通过" bean:beanB"在配置的RouteBuilder中)。

问题

这是有效的,但对Camel来说是新手,我不确定这是否是实现所需功能的一种非常好的方法。进一步研究Camel文档后,似乎有很多不同的方法可以做同样的事情(在Spring中配置路由,而不是定义RouteBuiler实现,使用SedaEndpoint实现,在spring中定义ProducerTemplate,使用它作为依赖而不是CamelContext本身.....)。

实现所需功能的标准做法/最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

你可以用各种方式将事物连接在一起,但你所描述的非常标准......

说,你可以考虑以下......

  • 不要为生产者的每次调用创建一个新的ProducerTemplate(重用它等)。
  • 了解生产者/消费者的预期消息传递率,并可能使用camel-seda concurrentConsumers属性启用多线程消费
  • 使用较新版本的Camel而不是2.4(目前为2.10.2)