多个camel路由可以导致非常多的线程吗?

时间:2013-07-31 18:32:13

标签: java multithreading integration apache-camel routes

我会澄清我的问题。

我有一个集成两个系统的任务:一个服务于html和后端的前端,它为前端提供数据。 后端有一个非常大的REST api所以我必须使用多个路由。 我计划使用单个驼峰上下文并将所有路径包装进去。

<camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
    <from uri="direct:data"/>
    <to uri="ahc:http://localhost/data"/>
    <!--And so on. More than 70 routes-->
</camelContext>

然后,我计划在Hiding middleware article

中建议使用服务方法上的@Produce注释来调用路径
public interface Service {
    String data();
}

public class MyBean {
    @Produce(uri = "direct:data")
    protected Service producer;

    public void doSomething() {
        // lets send a message
        String response = producer.data();
    }
}

据我了解从herehere获取的信息,我最终会在我的应用中添加70个帖子(每个路由一个)。我担心它会导致严重的性能损失,而后端api将增长,线程数将随之增长。这是对的吗?如果这是真的,我该如何避免这种情况?据我了解,在这种情况下我不能使用ExecutorService线程池。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:4)

不,你不会以每条路线结束一个线程。线程模块通常与消费者的线程模型相关联(例如路由输入)。

例如,使用计时器组件的路由将使用计划的线程池(1个线程)。并且JMS组件将使用1个或多个线程,具体取决于您是否设置concurrentConsumers = N等。

直接组件类似于直接方法调用,它使用调用程序线程,因此该线程模型有0个新线程。

如果所有70条路线都使用了&lt;到&gt;那么您可能希望重用相同的端点,因此您可以重用AHC库的线程池。或者替代配置共享池以用于所有AHC端点。

顺便提一下,这个问题也发布在Camel用户论坛/邮件列表中:http://camel.465427.n5.nabble.com/Can-multiple-camel-routes-cause-a-very-large-number-of-threads-tp5736620.html

相关问题