2016-02-11 2 views
4

Camel RabbitMQ component позволяет установить как опцию concurrentConsumers, так и threadPoolSize. Их описание и по умолчанию выглядит следующим образом:Camel RabbitMQ consumer: какое взаимодействие между concurrentConsumers и параметрами threadPoolSize?

concurrentConsumers - по умолчанию 1 - Количество одновременных потребителей потребляя от брокера. (например, аналогично той же опции для компонента JMS).

threadPoolSize - default 10 - Пользователь использует пул потоков Исполнитель с фиксированным числом потоков. Этот параметр позволяет вам установить количество потоков.

Может ли кто-нибудь объяснить, как эти два будут взаимодействовать, особенно с точки зрения производительности?

В частности, вдаваясь в нюансы немного:

  1. ли они примерно взаимозаменяемы? То есть это примерно так, что 2 потребителя, 5 нитей ~ 5 потребителей, 2 потока?
  2. Имеет ли каждый параллельный потребитель столько потоков, как указано в threadPoolSize, или эти потоки разделены между всеми параллельными потребителями?

Большое спасибо!

ответ

0

Здесь:

RabbitMQ компонент использует один RabbitMQ Connection за верблюда (не RabbitMQ) потребителя. Это означает, что если у вас есть 5 покупателей с верблюжьей крошкой, Camel откроет 5 соединений, каждая из которых имеет нить размером threadPoolSize, независимо от параметра concurrentConsumers.

1

I've сделал несколько тестов на моей машине, и это то, что я получил (я не пошел через документы, так что я могу ошибаться):

1. я заметил, что количество потребителей количество «слушателей», которое вы будете прикреплять к своей очереди (они могут получать сообщение, но делегировать обработку рабочим потокам). Количество потоков - это количество рабочих, которые будут обрабатывать сообщение.

Тест 1: С 1 нить, 10 потребителей и 10 сообщений, вы будете иметь 10 сообщений одновременно «доставленные» (но не acked) с 1 обрабатываемый в то время с помощью единого рабочего потока.

Тест 2: с 10 нитями, 1 потребителя и 10 сообщений, вы также 1 сообщение обрабатывается в то время, но в то время как время обработки сообщения остальные доступны в очереди (только 1 при время доставки), поэтому, если другой слушатель присоединяется, он сможет обрабатывать оставшиеся сообщения (не в первом примере).

2. Я думаю, что потоки являются общими, потому что если это не так, на тесте 1 в 10 сообщениях будет потребляться параллельно (1 нить для каждого потребителя на общую сумму 10 нить, а не только один) которым является а не то, что произошло.

Надеюсь, это поможет!

Смежные вопросы