【问题标题】:Does concurrentConsumers value affect number of Camel processor threads?concurrentConsumers 值是否会影响 Camel 处理器线程的数量?
【发布时间】:2019-08-20 21:05:26
【问题描述】:

我有一个来自 ActiveMQ 代理的 Apache Camel 路由和处理器。

路线代码-

@Component
public class MyRoute extends RouteBuilder {

    private String mySubscription;

    private MyProcessor myProcessor;

    public MyRoute(@Value("${my.topic}") String mySubscription, MyProcessor myProcessor) {
        this.mySubscription = mySubscription;
        this.myProcessor = myProcessor;
    }

    @Override
    public void configure() {
        from(mySubscription)
                .unmarshal().json(JsonLibrary.Jackson, MyDTO.class)
                .bean(myProcessor, "process(${body})")
                .end();
    }
}

处理器代码 -

@Slf4j
@Component
@AllArgsConstructor
public class MyProcessor {

    public void process(MyDTO dto) {

        //code that calls HTTP URLs

    }

}

配置如下-

spring:
  application:
    name: my_listener

//Bean prefixes
        pooledConnectionFactory:
          maxConnections: 10
        connectionFactory:
          brokerURL: ${brokerURL}
        redeliveryPolicy:
          backOffMultiplier: 2.0
          useExponentialBackOff: true
          redeliveryDelay: 60000
          maximumRedeliveries: 5
        component:
          forceSendOriginalMessage: true
          concurrentConsumers: 15

//A bunch of HTTP URLs

brokerURL: <brokerURL>

在本地运行侦听器并将 VisualVM 指向本地 ActiveMQ 代理时,我可以在 VisualVM 线程选项卡下看到名称包含订阅名称的 15 个线程。如果我发送 4 条消息,我会看到 4 个不同的线程进入运行状态。尽管 MBeans 选项卡中的处理器下有一个 bean,但我没有看到任何可识别为处理器类对象的线程。在该 bean 上调用 getTotalExchanges() 会显示 4 = 已发送消息数。

concurrentConsumers 设置(此处为 15)是否仅创建 15 个线程用于消费?通过处理器类的处理是否仍按顺序进行?还是每个订阅线程都在自己的线程中调用处理器对象,使处理器逻辑成为多线程?

【问题讨论】:

    标签: apache-camel activemq


    【解决方案1】:

    concurrentConsumers 设置(这里是 15)是否只创建 15 个线程供消费?

    Ans - 是的,懒惰。您可以通过提供自己的线程池来控制它。

    通过处理器类的处理是否仍按顺序进行?还是每个订阅线程都在自己的线程中调用处理器对象,使处理器逻辑成为多线程?

    Ans - 不,它是并行发生的,就像任何多线程应用程序一样,这意味着如果使用任何共享数据,处理方法应该是线程安全的。

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 1970-01-01
      • 2013-12-28
      • 2013-10-17
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      相关资源
      最近更新 更多