簡體   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