嗨,我正在使用apache camel + Spring并定义了类似的配置
public class MyOrderConsumerRouterBuilder extends RouteBuilder implements InitializingBean, ApplicationContextAware{
@Override
public void configure() throws Exception {
from("seda:asyncChannel?concurrentConsumers=20").id("asyncProcessChannelFromId")
.to("bean:OrderProcessManager?method=processOrders").id("asyncProcessChannelToId");
}
}
这是Producer多线程吗?我看到消费者很多。在我的情况下,它是: parallelConsumers = 20
我检查了以下URL
How do I configure the default maximum cache size for ProducerCache or ProducerTemplate
根据源代码DefaultCamelContext.createProducerTemplate()DefaultCamelContext使用 maximumCacheSize (默认值为1000)创建DefaultProducerTemplate
据我所知,可以使用maximumCacheSize作为LRU定义多个生产者。就我而言,我只有一个端点,即SEDA,因此只有一个生产者。
因此,我认为永远只有一个单线程生产者。请帮助我更好地理解它。
答案 0 :(得分:0)
生产者不是多线程,但是有多个生产者。
在您的情况下,有20个使用者(线程)正在等待消息。如果消息到达,这些线程之一将根据路由定义对消息进行处理。
如果另一条消息到达,处理第一条消息的线程可能仍被占用,但是其他19个空闲线程中的一个可以处理该消息。
只要没有拆分器,聚合器和类似的EIP,单个线程就将消息“遍历”您的路由,并最终将消息发送到OrderProcessManager
bean。因此,该生产步骤(调用bean方法)显然是由单个线程针对单个消息完成的。
但是,由于最多可以有20个线程并行处理消息,因此OrderProcessManager
bean可以由多达20个生产者(线程)并行调用。