concurrentConsumers值是否会影响Camel处理器线程的数量?

问题描述 投票:1回答:1

我有一个Apache Camel路由和处理器从ActiveMQ代理消耗。

路线代码 -

@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代理时,我可以看到15个线程,其名称包含VisualVM Threads选项卡下的预订名称。如果我发送了4条消息,我会看到4个不同的线程进入运行状态。我没有看到任何线程可识别为处理器类对象,尽管MBeans选项卡中的处理器下有一个bean。在该bean上调用getTotalExchanges()会显示4 =没有发送的消息。

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

apache-camel activemq
1个回答
3
投票

concurrentConsumers设置(此处为15)是否仅创建15个线程供消费?

答案 - 是的,懒洋洋地说。您可以通过提供自己的线程池来控制它。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.