Преобразовать Spring Cloud Stream для использования реактивной облачной функции - PullRequest
0 голосов
/ 13 января 2020

В настоящее время у меня есть приложение Spring Boot, которое выглядит примерно так.

@Component
@EnableBinding(Source::class)
class EmailMessageProducer(private val source: Source) {

    suspend fun send(textMessage: TextMessage) {

        source.output().send(
            MessageBuilder.withPayload(textMessage).setHeader("service", "test").build()
        )
    }
}

Я бы хотел использовать здесь функцию Spring Cloud с использованием реактивного шаблона.

Кроме того, мое текущее решение не блокирование? Я спрашиваю об этом, потому что я впервые использую Kotlin сопрограмму в этом контексте.

Java решение работает и для меня, так как я просто пытаюсь понять концепцию здесь.

1 Ответ

0 голосов
/ 13 января 2020

То, что вы ищете, - это активный поставщик (например, Supplier<Flux>).

В вашем случае это выглядело бы примерно так:

@SpringBootApplication
public class SomeApplication {

    @Bean
    public Supplier<Flux<Message<String>>> messageProducer() {
        return () -> Flux.just(MessageBuilder.withPayload(textMessage).setHeader("service", "test").build());
    }
}

Предоставьте свойство spring.cloud.function.definition=messageProducer, и это в значительной степени так.

Очевидно, что в приведенном выше примере получен конечный поток с одним элементом, но вы можете свободно изменять возвращаемый поток. На самом деле мы обсудим это более подробно здесь .

...