0

我会澄清我的问题。

我的任务是集成两个系统:一个提供 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>

然后,我计划按照隐藏中间件文章中的建议在服务方法上使用 @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();
    }
}

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

提前感谢您的任何回答。

4

1 回答 1

5

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

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

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

如果您的所有 70 条路由都使用 < to > 中的 AHC,那么您可能希望重用相同的端点,因此您重用 AHC 库的线程池。或者配置一个共享池以供所有 AHC 端点使用。

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

于 2013-08-01T08:24:17.390 回答