Spring Cloud Stream / Функция: Котлинские лямбды без использования Java Function / BiFunction - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть приложение для обработки потока Kafka, написанное с использованием Spring Boot, с использованием spring-cloud-function и spring-cloud-stream-binder-kafka-streams. Метод, который обрабатывает пару потоков, помечается @Bean, так что он должен быть выбран spring-cloud-function (вместо использования @StreamListener). Когда этот метод возвращает BiFunction, он работает. Но когда я пытаюсь использовать его как простую лямбду Kotlin, она не подхватывается Spring Boot: приложение запускается, а затем сразу же завершается, поскольку не находит никаких функций для запуска.

Из того, что я вижу в документации , это должно работать.

Вот декларация, что работает :

@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 в этом случае?

1 Ответ

2 голосов
/ 06 ноября 2019

В настоящее время (в версии 3.0) для функциональной поддержки привязки Kafka Streams требуются java.util.function типы. Он еще не работает со стандартными функциями в Kotlin (или мы ничего не проверяли в этом отношении). Мы планируем рассмотреть это как функцию 3.1. Если вы не возражаете, не могли бы вы создать новый выпуск здесь ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...