Да; в этом весь смысл - это фабрика для слушающих контейнеров; Обычно вам нужна только одна фабрика, которая автоматически конфигурируется при загрузке.
Если вам нужны разные свойства (например, десериализаторы) для прослушивателя, последние версии (начиная с spring-kafka 2.2.4) позволяют переопределять потребительские свойства в аннотация.
Чтобы переопределить другие свойства, например свойства контейнера, для отдельных слушателей, добавьте настройщик контейнера слушателя на завод.
@Component
class ContainerFactoryCustomizer {
ContainerFactoryCustomizer(AbstractKafkaListenerContainerFactory<?, ?, ?> factory) {
factory.setContainerCustomizer(
container -> {
String groupId = container.getContainerProperties().getGroupId();
if (groupId.equals("foo")) {
container.getContainerProperties().set...
}
else {
container.getContainerProperties().set...
}
});
}
Как видите, вы можете сказать, какой контейнер мы создаем, когда он вызывается, используя свойство контейнера groupId()
.
Возможно, вы захотите использовать 2 фабрики, если ваш слушатели имеют совершенно другую конфигурацию, но тогда вы теряете возможности автоматической конфигурации загрузки (по крайней мере, для фабрики).