【问题标题】:Spring cloud stream apps created using Function interface not communicating data in Spring cloud data flow使用函数接口创建的 Spring 云流应用程序不在 Spring 云数据流中通信数据
【发布时间】:2020-06-05 12:05:47
【问题描述】:

我已经创建了 3 个简单的 Spring 云流应用程序(Source/Processor/Sink),使用 Spring 云函数方法传输 Flux。

源应用:

@SpringBootApplication
public class SourceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SourceApplication.class, args);
    }

    @PollableBean
    public Supplier<Flux<String>> stringSupplier() {
        return () -> {
            String v1 = String.valueOf("abc");
            String v2 = String.valueOf("pqr");
            String v3 = String.valueOf("xyz");
            return Flux.just(v1, v2, v3);
        };
    }
}

处理器应用程序:

@SpringBootApplication
public class ProcessorApplication {

    @Bean
    public Function<Flux<String>, Flux<String>> uppercase() {
        return flux -> flux.map(value -> value.toUpperCase()).log();
    }

    public static void main(String[] args) {
        SpringApplication.run(ProcessorApplication.class, args);
    }
}

接收器应用:

@SpringBootApplication
public class SinkApplication {
    public static void main(String[] args) {
        SpringApplication.run(SinkApplication.class, args);
    }

    @Bean
    public Consumer<Flux<String>> log() {
        return flux -> {
            flux.subscribe(f -> System.out.println("Received data: " + f));
        };
    }
}

我添加的依赖是:

SpringBoot version = 2.2.6.RELEASE

implementation(platform("org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR5"))
implementation(platform("org.springframework.cloud:spring-cloud-stream-dependencies:Horsham.SR5"))
implementation("org.springframework.cloud:spring-cloud-starter-stream-rabbit")
implementation("org.springframework.cloud:spring-cloud-starter-function-webflux:3.0.7.RELEASE")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-webflux")

我已经在 Spring Cloud Data Flow 中注册了这些应用程序并部署在流中。

我能够将数据传输到这些应用程序并分别通过 HTTP 和 RabbitMQ 接收输出。但是,消息不会在应用程序之间进行通信(源->处理器->接收器)。 我是否缺少任何依赖项、注释或应用程序属性。

目前我的应用程序属性文件完全为空。

【问题讨论】:

    标签: spring-boot spring-cloud-stream spring-cloud-dataflow spring-cloud-function


    【解决方案1】:

    你需要设置spring.cloud.stream.function.bindings.-in-0=input。见https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/current/reference/html/spring-cloud-stream.html#_programming_model。我们希望在未来的 Dataflow 版本中实现这一点的自动化。

    【讨论】:

    • 感谢 dturanski 的解决方案,我在应用程序属性文件中添加了 bindings 属性。它就像一个魅力。
    猜你喜欢
    • 2019-01-16
    • 2023-01-21
    • 2016-11-18
    • 2017-11-02
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多