У меня есть требование, когда у меня есть 1 прямой обмен и 5 разных очередей, привязанных к нему с уникальным ключом маршрутизации. В основном каждая очередь предназначена для разных конечных точек потребителя. Я использую управляемый реестр конечных точек Spring, используя файл @RabbitListener
. Итак, зарегистрировано 5 конечных точек. Пока я его реализовывал, я создал один RabbitListenerContainerFactory
со значением concurrentConsumer
равным 2. Но у меня есть вопрос по этому поводу: если есть одна фабрика, созданная с размером потребителя, равным 2, тогда все конечные точки будут иметь отдельные потребители или потребители создаются для каждой фабрики, и этот containerFactory
будет обслуживать все 5 конечных точек. Таким образом, если 2 потребителя обслуживают все 5 очередей, не будет ли дисбаланса в нагрузке, когда другие потребители очередей будут простаивать до тех пор, пока сообщения одной очереди не будут обслужены первыми? Должен ли я создавать отдельные containerFactory
для разных конечных точек?
Каким будет поведение при создании одного RabbitListenerContainerFactory с двумя потребителями и несколькими конечными точками для прослушивания сообщений?
Ответы (1)
Каждый @RabbitListener
получает свой собственный контейнер, каждый с 2 потребителями.
Это контейнер factory, который используется для создания контейнера для каждого аннотированного метода. Считайте это чем-то вроде «шаблона»; очень похоже на элемент <rabbit:listener-container/>
в XML — он имеет набор общих свойств, но каждый дочерний элемент <rabbit:listener/>
получает свой собственный контейнер.
person
Gary Russell
schedule
03.11.2015