【发布时间】:2019-11-06 14:46:50
【问题描述】:
我有一个使用 Spring Boot 编写的 Kafka 流处理应用程序,使用 spring-cloud-function 和 spring-cloud-stream-binder-kafka-streams。处理几个流的方法用@Bean注解,所以它应该被spring-cloud-function拾取(而不是使用@StreamListener)。当此方法返回 BiFunction 时,它可以工作。但是当我将它作为普通的 Kotlin lambda 进行尝试时,Spring Boot 并没有发现它:应用程序启动然后立即结束,因为它没有找到要运行的函数。
据我在the documentation 中看到的,这应该可以工作。
这是确实工作的声明:
@Bean
fun process():
BiFunction<KStream<String, Foo>, GlobalKTable<String, Bar>, KStream<String, Baz>> =
BiFunction { foo, bar ->
...
这是不起作用的声明:
@Bean
fun process():
(foo: KStream<String, Foo>, bar: GlobalKTable<String, Bar>) -> KStream<String, Baz> =
{ foo, bar ->
...
(两种情况下方法的内容都是一样的。)
根据文档,我已将 spring-cloud-function-kotlin 模块添加到类路径中,方法是将其添加到 build.gradle.kts:
implementation("org.springframework.cloud:spring-cloud-function-kotlin")
Spring Cloud Stream 的版本是Hoxton.RC1。
我还需要做些什么来获取该功能吗?还是在这种情况下我需要使用BiFunction?
【问题讨论】:
标签: kotlin spring-cloud-stream spring-cloud-function spring-cloud-stream-binder-kafka