0

我有一个使用 Spring Boot 编写的 Kafka 流处理应用程序,使用spring-cloud-functionspring-cloud-stream-binder-kafka-streams. 处理几个流的方法用 注释,因此它应该被(而不是使用)@Bean拾取。当此方法返回 a时,它可以工作。但是当我将它作为普通的 Kotlin lambda 进行尝试时,Spring Boot 并没有发现它:应用程序启动然后立即结束,因为它没有找到要运行的函数。spring-cloud-function@StreamListenerBiFunction

从我在文档中可以看到,这应该可行。

这是有效的声明:

@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在这种情况下使用?

4

1 回答 1

2

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

于 2019-11-06T15:32:07.150 回答