Spring Cloud Stream - 多种功能

时间:2021-01-06 22:50:33

标签: spring-cloud-stream spring-cloud-stream-binder-kafka

是否可以使用两个函数,其中第一个函数的输出是第二个函数的输入?

我的职能:

@Configuration
public class StringStream {

    @Bean
    public Supplier<Flux<String>> stringSupplier() {
        return () -> Flux.interval(Duration.of(1L, ChronoUnit.SECONDS))
                .map(v -> RandomStringUtils.randomAlphabetic(10));
    }

    @Bean
    public Function<KStream<Bytes, String>, KStream<Bytes, String>> reverse() {
        return strings -> strings.mapValues(StringUtils::reverse);
    }

    @Bean
    public Function<KStream<Bytes, String>, KStream<Bytes, String>> uppercase() {
        return strings -> strings.mapValues((ValueMapper<String, String>) String::toUpperCase);
    }

    @Bean
    public Consumer<String> print() {
        return message -> LOGGER.info("==> {}", message);
    }
}

我的配置:

...
spring.cloud.stream:
  function:
    definition: stringSupplier;uppercase;reverse;print

spring.cloud.stream.bindings.stringSupplier-out-0:
  content-type: text/plain
  destination: strings-random

spring.cloud.stream.bindings.reverse-in-0:
  destination: strings-random
spring.cloud.stream.bindings.reverse-out-0:
  destination: strings-reversed

spring.cloud.stream.bindings.uppercase-in-0:
  destination: strings-reversed
spring.cloud.stream.bindings.uppercase-out-0:
  destination: strings-uppercase

spring.cloud.stream.bindings.print-in-0:
  destination: strings-uppercase

它只向 strings-reversed 发送字符串。这是限制还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

是,解决的办法是使用 | 运算符来连接功能

例如此配置应该Concat的所有操作..

spring.cloud.stream:
  function:
    definition: stringSupplier|uppercase|reverse|print

引擎盖下弹簧云流用途弹簧云的功能,以提供函数组合到框架。

您可以在文档的更多信息..
https://docs.spring.io/spring-cloud-function/docs/3.1.0/reference/html/spring-cloud-function.html#_declarative_function_composition