運算子 gateway()
在 IntegrationFlow
定義中,gateway()
運算子是一種特殊的服務啟用器實現,用於透過其輸入通道呼叫其他端點或整合流,並等待回覆。從技術上講,它扮演的角色與 <chain>
定義中巢狀的 <gateway>
元件相同(參見 在 Chain 中呼叫 Chain),並使得流更加清晰和直接。從邏輯和業務角度來看,它是一個訊息閘道器,允許在目標整合解決方案的不同部分之間分發和重用功能(參見 訊息閘道器)。該運算子有幾個過載,用於不同的目的:
-
gateway(String requestChannel)
:透過名稱將訊息傳送到某個端點的輸入通道; -
gateway(MessageChannel requestChannel)
:透過直接注入將訊息傳送到某個端點的輸入通道; -
gateway(IntegrationFlow flow)
:將訊息傳送到提供的IntegrationFlow
的輸入通道。
所有這些過載都含有一個帶有第二個 Consumer<GatewayEndpointSpec>
引數的變體,用於配置目標 GatewayMessageHandler
和相應的 AbstractEndpoint
。此外,基於 IntegrationFlow
的方法允許呼叫現有的 IntegrationFlow
Bean,或透過 IntegrationFlow
函式式介面的內聯 lambda 將流宣告為子流,或將其提取到 private
方法中以獲得更整潔的程式碼風格
@Bean
IntegrationFlow someFlow() {
return IntegrationFlow
.from(...)
.gateway(subFlow())
.handle(...)
.get();
}
private static IntegrationFlow subFlow() {
return f -> f
.scatterGather(s -> s.recipientFlow(...),
g -> g.outputProcessor(MessageGroup::getOne))
}
如果下游流不總是返回回覆,應將 requestTimeout 設定為 0,以防止呼叫執行緒無限期掛起。在這種情況下,流將在該點結束,並釋放執行緒以進行後續工作。 |