【问题标题】:Apache Camel ProducerTemplateApache Camel Producer模板
【发布时间】:2019-04-20 20:56:08
【问题描述】:

您好,我正在使用 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 多线程吗?我看到消费者是多元化的。就我而言,它是 : concurrentConsumers=20

我检查了下面的网址

How do I configure the default maximum cache size for ProducerCache or ProducerTemplate

根据源代码 DefaultCamelContext.createProducerTemplate() DefaultCamelContext DefaultProducerTemplate 正在创建 ma​​ximumCacheSize(默认 1000)

据我了解,可以有多个生产者使用 maximumCacheSize 作为 LRU 来定义。就我而言,我只有一个端点,即 SEDA,所以只有一个生产者。

所以我认为总会有一个单线程生产者。请帮助我更好地理解它。

【问题讨论】:

    标签: apache-camel producer-consumer


    【解决方案1】:

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

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

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

    只要没有拆分器、聚合器和类似的 EIP,单个线程就会通过您的路由“遍历”消息,并在您的情况下最终将消息发送到 OrderProcessManager bean。所以这个生产步骤(调用 bean 方法)显然是由单个线程为单个消息完成的。

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

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2018-10-22
      • 2019-08-06
      • 2015-01-30
      • 2023-01-27
      相关资源
      最近更新 更多