我可以使用下一种方式创建像 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)
}
}
那么有没有办法实现这个逻辑?