我会澄清我的问题。
我有一个集成两个系统的任务:一个服务于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();
}
}
据我了解从here和here获取的信息,我最终会在我的应用中添加70个帖子(每个路由一个)。我担心它会导致严重的性能损失,而后端api将增长,线程数将随之增长。这是对的吗?如果这是真的,我该如何避免这种情况?据我了解,在这种情况下我不能使用ExecutorService线程池。
提前感谢您的回答。
答案 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