春季卡夫卡流。创建多个流

时间:2021-02-12 16:04:23

标签: spring kotlin dependency-injection apache-kafka apache-kafka-streams

我可以使用下一种方式创建像 spring bean 一样的 kafka 流:

@Bean
fun kStream(kStreamBuilder: StreamsBuilder): KStream<String, String> {
    val stream = kStreamBuilder
            .stream<String, String>("topic1")
    stream.map(mapValuesAndGetAnswer())
            .to("topic2")
    return stream

但现在我需要为几个主题创建它。例如,我有一个包含主题和主题的数组:inTopic["topic1","topic2","topic3"],outTopic["outTopic1',"outTopic1',"outTopic3']。 此主题的数量及其名称需要从 application.yaml 获取,因此我尝试使用 autowireCapableBeanFactory 动态创建此流,但它不起作用

@PostConstruct
fun createKafkaBeans() {
    val beanFactory = applicationContext.autowireCapableBeanFactory
    for (i in kafkaStreamsProps.inboundTopic.indices) {
        val inTopic = kafkaStreamsProps.inboundTopic[i]
        val outTopic = kafkaStreamsProps.outboundTopic[i]
        val kStreamBuilder = StreamsBuilder();
        val stream = kStreamBuilder
                .stream<String, String>(inTopic)
        stream.map(mapValuesAndGetAnswer()).to(outTopic)
        val initializedBean = beanFactory.initializeBean(stream, "streamTopic$i")
        beanFactory.autowireBean(initializedBean)
    }
}

那么有没有办法实现这个逻辑?

0 个答案:

没有答案