如何将“ Kafka Streams Binder”与“ Functional Style”和DI一起使用?

时间:2019-08-20 08:15:26

标签: spring-cloud spring-kafka spring-cloud-stream

https://cloud.spring.io/spring-cloud-static/spring-cloud-stream-binder-kafka/3.0.0.M3/reference/html/spring-cloud-stream-binder-kafka.html#_programming_model显示了一个示例,其中可以使用属性spring.cloud.stream.bindings.process_in.destination设置输入主题

现在我想使用依赖注入,例如

@Bean
public java.util.function.Consumer<KStream<Object, String>> process(JavaMailSender mailSender) {...}

(基于Spring Boot)启动应用程序时,属性spring.cloud.stream.bindings.process_in.destination被忽略,而是订阅了输入主题input

编辑:这是Kotlin代码(不导入)

Mailer.kt:

@Configuration
class Mailer {
    @Bean
    fun sendMail(/*mailSender: JavaMailSender*/) = Consumer<KStream<Any, Mail>> { input ->
        input.foreach { _, mail -> println("mail = $mail") }
    }
}

Mail.kt:

data class Mail(var from: String = "", var to: String = "", var subject: String = "", var body: String = "")

Application.kt:

@SpringBootApplication
class Application

fun main(args: Array<String>) {
    runApplication<Application>(*args) {
    }
}

application.yml ::

spring.cloud.stream:
  bindings.sendMail_in.destination: mail
  kafka.binder.configuration.listeners: PLAINTEXT://localhost:9092

1 个答案:

答案 0 :(得分:1)

活页夹中存在一些问题,这些问题未能正确autowire bean提供给功能/消费者的bean。最新快照解决了这些问题。请确保您使用的是最新快照(3.0.0.BUILD-SNAPSHOT)。这是sample application,可用于您提供的相同方案。