Jan*_*ski 9 java configuration multithreading apache-camel rabbitmq
Camel RabbitMQ组件允许设置选项concurrentConsumers和threadPoolSize.他们的描述和默认值如下:
concurrentConsumers- default 1 - 从代理消耗时的并发使用者数.(例如,与JMS组件的相同选项类似).
threadPoolSize- 默认值10 - 使用者使用具有固定线程数的线程池执行程序.此设置允许您设置该线程数.
有人可以解释这两者是如何相互作用的,特别是从表现的角度来看?
特别是,进入细微差别:
threadPoolSize所有并发消费者之间共享的线程或这些线程?非常感谢!
我在我的机器上进行了一些测试,这就是我得到的(我没有通过文档,所以我可能错了):
1.我注意到消费者的数量是你将附加到队列中的"监听器"的数量(他们可以接收消息但是将处理委托给工作者线程).线程数是实际处理消息的工作者数量.
测试1: 对于1个线程,10个消费者和10个消息,您将同时"传递"(但未执行)10条消息,其中1个工作线程一次处理1个.
测试2: 使用10个线程,1个消费者和10个消息,您还将同时处理1条消息,但在处理消息时,其他消息在队列中可用(一次只能传送1条消息),因此,另一个监听器附加,它将能够处理剩余的消息(不是第一个例子中的情况).
2. 我认为线程是共享的,因为如果不是这种情况,在测试1上将并行消耗10条消息(每个消费者总共10个线程的1个线程,而不仅仅是1个),这不是发生的事情.
我希望这有帮助!
这里:
concurrentConsumers是Camel 将为您创建的竞争本机 RabbitMQ 消费者的数量。Camel 调用 [ channel.basicConsume()]( https://www.rabbitmq.com/releases/rabbitmq-java-client/v2.7.1/rabbitmq-java-client-javadoc-2.7.1/com/rabbitmq/client/Channel.html#basicConsume (java.lang.String , boolean, com.rabbitmq.client.Consumer)) 创建每个消费者。
threadPoolSize是从 中创建 ConnectionExecutorService时 RabbitMQ 所需的线程数。Camel 将为您创建这个线程池。ConnectionFactory
RabbitMQ 组件为每个 Camel(不是 RabbitMQ)消费者使用一个 RabbitMQ Connection。这意味着如果您有 5 个camel-rabbitmq 消费者,Camel 将打开 5 个连接,每个连接都有一个 size 的线程池threadPoolSize,无论concurrentConsumers参数如何。
| 归档时间: |
|
| 查看次数: |
1878 次 |
| 最近记录: |