2016-03-04 1 views
0

Я довольно новичок в модуле Spring AMQP. Мне удалось создать простой проект, который производит и потребляет сообщения. То, что я не понимаю, следующее:Как проверить улучшение производительности на ConcurrentConsumers весной-amqp

Если в SimpleMessageListenerContainer имеется только один прослушиватель, и в SimpleMessageListenerContainer настроено более одного одновременного пользователя, как это улучшит производительность? По моему мнению, до тех пор, пока у меня есть один слушатель, который обрабатывает сообщение, независимо от того, сколько потребителей (потоков) собирает сообщения из очереди, не имеет значения.

Вот мой код для справки:

@Bean 
public SimpleMessageListenerContainer messageListenerContainer() { 
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory()); 
container.setQueues(someQueue()); 
container.setMessageListener(messageListenerAdapter()); 
container.setConcurrentConsumers(3); 
return container; 
} 

Я уверен, что я пропускаю что-то в моем понимании. Может кто-то пролить свет, пожалуйста. Заранее спасибо.

ответ

1

Контейнер создаст 3 потока; каждый из которых зарегистрирован как потребитель. Это эквивалентно созданию 3 отдельных контейнеров с 1 потребителем каждый.

Каждый потребитель будет вызывать ваш единственный слушатель - он должен быть потокобезопасным - никакие общие данные/поля или доступ к каким-либо таким данным не должны синхронизироваться.

Лучше всего использовать бесполезный bean-компонент для вашего слушателя, поэтому вам не нужно беспокоиться о параллелизме.

Если вы не можете сделать свой прослушиватель потокобезопасным, вы должны создать 3 отдельных контейнера и предоставить каждому свой экземпляр вашего слушателя.

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

  • Нет связанных вопросов^_^