как настроить два экземпляра Kafka StreamsBuilderFactoryBean при весенней загрузке - PullRequest
1 голос
/ 05 марта 2019

Используя spring-boot-2.1.3, spring-kafka-2.2.4, я хочу иметь две конфигурации потоков (например, иметь разные application.id или подключаться к другому кластеру и т. Д.). Поэтому я определил первую конфигурацию потока в соответствии с документами, затем добавил второй с другим именем и второй StreamsBuilderFactoryBean (также с другим именем):

@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
public KafkaStreamsConfiguration kStreamsConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(StreamsConfig.APPLICATION_ID_CONFIG, "myappId1000");
    props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    //...
    return new KafkaStreamsConfiguration(props);
}

@Bean(name = "myKappConfig")
public KafkaStreamsConfiguration myKafkaAppIdConfiguration() {
    Map<String, Object> props = new HashMap<>();
    props.put(StreamsConfig.APPLICATION_ID_CONFIG, "myappId9999");
    props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    //...
    return new KafkaStreamsConfiguration(props);
}

@Bean(name = "myKappConfigStreamBuilder")
public StreamsBuilderFactoryBean myAppStreamBuilder(
        @Qualifier("myKappConfig") KafkaStreamsConfiguration myKafkaAppIdConfiguration) {
    return new StreamsBuilderFactoryBean(myKafkaAppIdConfiguration);
}

Однако, когда я пытаюсь запустить приложение, я получаю:

Параметр 0 метода kafkaStreamsFactoryBeanConfigurer в org.springframework.boot.autoconfigure.kafka.KafkaStreamsAnnotationDrivenConfiguration требуется один бин, но было найдено 2: - & defaultKafkaStreamsBuilder: определяется методом defaultKafkaStreamsBuilder в ресурсе пути к классу [Орг / springframework / Kafka / аннотаций / KafkaStreamsDefaultConfiguration.class] - & myKappConfigStreamBuilder: определяется методом 'myAppStreamBuilder' в ресурсе пути к классу [Ком / teramedica / kafakaex001web / KafkaConfig.class]

потому что код в автоконфигурации при весенней загрузке делает:

@Bean
public KafkaStreamsFactoryBeanConfigurer kafkaStreamsFactoryBeanConfigurer(
        StreamsBuilderFactoryBean factoryBean) {
    return new KafkaStreamsFactoryBeanConfigurer(this.properties, factoryBean);
}

Если не считать полной замены KafkaStreamsAnnotationDrivenConfiguration, как мне определить более одного StreamsBuilderFactoryBean. Или, альтернативно, как я могу изменить свойства для данного потока?

1 Ответ

1 голос
/ 05 марта 2019

Отметьте один заводской компонент с @Primary.

...