为什么ApacheCamel在队列不为空时不同时使用jms消息

为什么ApacheCamel在队列不为空时不同时使用jms消息,jms,apache-camel,Jms,Apache Camel,apache-activemq-5.8.0、apache-camel-2.12.3 我试图实现jms消息的并发使用。使用者的端点设置了下一个参数: from( "lala:queue:testConcurrentConsumers?asyncConsumer=true&concurrentConsumers=5&maxConcurrentConsumers=6") .process(new Processor() { @Override pub

apache-activemq-5.8.0、apache-camel-2.12.3

我试图实现jms消息的并发使用。使用者的端点设置了下一个参数:

from(
 "lala:queue:testConcurrentConsumers?asyncConsumer=true&concurrentConsumers=5&maxConcurrentConsumers=6")
    .process(new Processor() {

      @Override
      public void process(
          final Exchange exchange) throws Exception {
        counter.incrementAndGet();
        System.out.println("sleep: " + exchange.getIn().getBody());
        Thread.sleep(1000);
        System.out.println("woke up: " + exchange.getIn().getBody());
      }

    });
当代理上不存在队列时——一切正常,进一步发送的jms消息将与5到6个使用者线程并发处理

但是,如果在启动CamelContext时代理上存在队列,则只创建5个使用者,它们逐个顺序处理消息(看起来只使用了单个线程,而不是使用了5-6个线程的线程池)

我在参数方面做错了什么


关于这个问题,我在互联网上发现的唯一相似之处是

我发现了如何配置消费者:
?asyncConsumer=true&transactive=true&maxConcurrentConsumers=6
关闭缓存或
?asyncConsumer=true&maxConcurrentConsumers=6&cacheLevelName=CACHE\u NONE
我也有同样的问题,但是使用
transact=true
只能部分解决我的问题。首先从队列中读取一条消息,然后在完成后,并发处理其余消息。使用
cacheLevelName=CACHE\u NONE
对我来说很管用。事实上,这是我的错。使用
cacheLevelName=CACHE\u NONE
会产生相同的行为,首先读取一条消息,然后并发处理其余消息。还是比所有按顺序处理好。