Camel RabbitMQ使用者:concurrentConsumers和threadPoolSize选项之间的交互是什么?

Jan*_*ski 9 java configuration multithreading apache-camel rabbitmq

Camel RabbitMQ组件允许设置选项concurrentConsumersthreadPoolSize.他们的描述和默认值如下:

concurrentConsumers - default 1 - 从代理消耗时的并发使用者数.(例如,与JMS组件的相同选项类似).

threadPoolSize - 默认值10 - 使用者使用具有固定线程数的线程池执行程序.此设置允许您设置该线程数.

有人可以解释这两者是如何相互作用的,特别是从表现的角度来看?

特别是,进入细微差别:

  1. 它们大致可以互换吗?也就是说,2个消费者,5个线程~5个消费者,2个线程大致是真的吗?
  2. 每个并发消费者是否获得了threadPoolSize所有并发消费者之间共享的线程或这些线程?

非常感谢!

Toy*_*oyo 5

我在我的机器上进行了一些测试,这就是我得到的(我没有通过文档,所以我可能错了):

1.我注意到消费者的数量是你将附加到队列中的"监听器"的数量(他们可以接收消息但是将处理委托给工作者线程).线程数是实际处理消息的工作者数量.

测试1: 对于1个线程,10个消费者和10个消息,您将同时"传递"(但未执行)10条消息,其中1个工作线程一次处理1个.

测试2: 使用10个线程,1个消费者和10个消息,您还将同时处理1条消息,但在处理消息时,其他消息在队列中可用(一次只能传送1条消息),因此,另一个监听器附加,它将能够处理剩余的消息(不是第一个例子中的情况).

2. 我认为线程是共享的,因为如果不是这种情况,在测试1上将并行消耗10条消息(每个消费者总共10个线程的1个线程,而不仅仅是1个),这不是发生的事情.

我希望这有帮助!


rau*_*ulk 1

这里:

RabbitMQ 组件为每个 Camel(不是 RabbitMQ)消费者使用一个 RabbitMQ Connection。这意味着如果您有 5 个camel-rabbitmq 消费者,Camel 将打开 5 个连接,每个连接都有一个 size 的线程池threadPoolSize,无论concurrentConsumers参数如何。