Apache Camel Producer模板

时间:2018-11-18 07:16:58

标签: apache-camel producer-consumer

嗨,我正在使用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,因此只有一个生产者。

因此,我认为永远只有一个单线程生产者。请帮助我更好地理解它。

1 个答案:

答案 0 :(得分:0)

生产者不是多线程,但是有多个生产者。

在您的情况下,有20个使用者(线程)正在等待消息。如果消息到达,这些线程之一将根据路由定义对消息进行处理。

如果另一条消息到达,处理第一条消息的线程可能仍被占用,但是其他19个空闲线程中的一个可以处理该消息。

只要没有拆分器,聚合器和类似的EIP,单个线程就将消息“遍历”您的路由,并最终将消息发送到OrderProcessManager bean。因此,该生产步骤(调用bean方法)显然是由单个线程针对单个消息完成的。

但是,由于最多可以有20个线程并行处理消息,因此OrderProcessManager bean可以由多达20个生产者(线程)并行调用。