Каким будет поведение при создании одного RabbitListenerContainerFactory с двумя потребителями и несколькими конечными точками для прослушивания сообщений?

У меня есть требование, когда у меня есть 1 прямой обмен и 5 разных очередей, привязанных к нему с уникальным ключом маршрутизации. В основном каждая очередь предназначена для разных конечных точек потребителя. Я использую управляемый реестр конечных точек Spring, используя файл @RabbitListener. Итак, зарегистрировано 5 конечных точек. Пока я его реализовывал, я создал один RabbitListenerContainerFactory со значением concurrentConsumer равным 2. Но у меня есть вопрос по этому поводу: если есть одна фабрика, созданная с размером потребителя, равным 2, тогда все конечные точки будут иметь отдельные потребители или потребители создаются для каждой фабрики, и этот containerFactory будет обслуживать все 5 конечных точек. Таким образом, если 2 потребителя обслуживают все 5 очередей, не будет ли дисбаланса в нагрузке, когда другие потребители очередей будут простаивать до тех пор, пока сообщения одной очереди не будут обслужены первыми? Должен ли я создавать отдельные containerFactory для разных конечных точек?


person Naveen    schedule 03.11.2015    source источник


Ответы (1)


Каждый @RabbitListener получает свой собственный контейнер, каждый с 2 ​​потребителями.

Это контейнер factory, который используется для создания контейнера для каждого аннотированного метода. Считайте это чем-то вроде «шаблона»; очень похоже на элемент <rabbit:listener-container/> в XML — он имеет набор общих свойств, но каждый дочерний элемент <rabbit:listener/> получает свой собственный контейнер.

person Gary Russell    schedule 03.11.2015