Spring Cloud Stream/Function:不使用 Java Function/BiFunction 的 Kotlin lambda

Spring Cloud Stream/Function: Kotlin lambdas without the use of Java Function/BiFunction

我有一个使用 Spring Boot 编写的 Kafka 流处理应用程序,使用 spring-cloud-functionspring-cloud-stream-binder-kafka-streams。处理几个流的方法用 @Bean 注释,因此它应该由 spring-cloud-function 提取(而不是使用 @StreamListener)。当此方法 returns a 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 吗?

目前(在 3.0 中),Kafka Streams 绑定功能支持需要 java.util.function 类型。它不适用于 Kotlin 中的标准函数(或者我们还没有在这方面验证任何东西)。我们计划将此作为 3.1 功能进行研究。如果您不介意,可以创建一个新问题 here 吗?