У меня есть приложение для обработки потока 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
в этом случае?