【问题标题】:Spring Cloud Stream/Function: Kotlin lambdas without the use of Java Function/BiFunctionSpring Cloud Stream/Function:不使用 Java Function/BiFunction 的 Kotlin lambdas
【发布时间】:2019-11-06 14:46:50
【问题描述】:

我有一个使用 Spring Boot 编写的 Kafka 流处理应用程序,使用 spring-cloud-functionspring-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


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2020-08-23
    • 1970-01-01
    • 2021-10-23
    • 2019-10-24
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多