繁体   English   中英

Spring 云 stream 合并来自两个不同函数的响应

[英]Spring cloud stream merge responses from two different functions

我正在尝试使用 spring 云 stream 来解决以下问题:

在此处输入图像描述

我有一个 class 调用两个单独的函数(函数 A 和 B),如果 886982359588 A 完成,这两个函数必须并行工作,它必须调用 Function C,如果 Function B 完成,也会发生同样的情况,但这将调用 888698882359然后我需要等待 Function C 和 Function D 完成并将两个响应合并为一个响应,然后将此合并响应 object 返回到必须等待获得该响应的起始 class。

我遇到的问题是:

  • 如何调用 Function C 传递 Function A 响应?
  • 如何等到 Function C 和 Function D 完成并在 Function E 中得到他们的响应?
  • 如何等待 controller 中 Function E 的响应,我正在使用streamBridge.send同时启动 Function A 和 Function B。

我正在使用

  • spring-cloud-stream-3.1.3
  • spring-cloud-stream-binder-rabbit必需

我不能使用Kafka必需

示例代码

服务等级

@Service
@RequiredArgsConstructor
public class ServiceClass {

    @NonNull
    private final StreamBridge streamBridge;

    @Override
    protected MergedResponse execute(Input input) {
        var send1 = streamBridge.send("functionA-in-0", input);
        var send2 = streamBridge.send("functionB-in-0", input);

        //TODO: Wait for Function E response object
    }
}

Function 一

@Slf4j
@Configuration
public class FunctionAClass{

    @Bean
    public Function<Input, OutputFunctionA> functionA() {
        return input -> {
            //TODO: Invoke Function C to pass OutputFunctionA object
            return OutputFunctionA.builder.build();
        };
    }
}

我不介意使用SupplierConsumer而不是Function

编辑你好,@Oleg Zhurakousky 感谢你的帮助,回答你的问题我的问题是:我必须创建一个 REST 端点,它使用N个不同的第三方 REST 端点(首先是两个,异步是必须的,因为它太慢了顺序处理每个请求)我不需要他们的所有数据,只需要几个字段来构建一个通用的 object。我打算使用streamBridge启动前两个函数,这些函数将为每个三分之一构建所需的请求-party,然后是一个 function 来调用他们的每个端点,然后是一个 function 来为每个响应构建一个公共的 object,最后是一个 function 来收集公共对象并将它们发送到我的服务的响应中。 如果您还有其他问题,请告诉我。

问候。

几点。

  1. 由于您正在引入一个同步点,因此无论您尝试什么,您最终都会有一个阻塞调用,因为同步(例如您的聚合要求)将不得不等待,等待两个响应,然后关联等等。最重要的是有一个问题您将要处理的 state 以及如何在聚合期间发生系统崩溃时恢复此类 state。
  2. 聚合并不是 sc-stream 的真正用例,因此我们没有基于框架的支持。 我会考虑使用 Spring 集成框架为两个以上的不同端点创建管道,然后使用 [聚合器模式](聚合器模式支持)进行聚合,然后使用 StreamBridge 将数据发送到目标目的地。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM