2016-04-30 28 views
1

我有拆分一條原始消息的拆分器消息變爲3部分。我需要通過http出站網關順序發送它。例如,步驟就是這樣。使用http出站網關響應作爲下一個http請求的值條件的彈簧集成

  1. 的消息稱爲分裂成(A1.request,A2.request,A3.request)通道
  2. A1.request發送到REST API服務器並返回響應A1.response通道
  3. 使用A1。條件值的響應通道,如果返回成功則發送A2.request到不同的url。
  4. 然後使用A2.response頻道作爲條件值,如果它返回成功,則發送A3.request到不同的url。
  5. 收集所有回覆通道(A1.response,A2.response,A3.response)爲下一步構建條件輸出。

實現該目標的最佳方法是什麼?提前致謝。

回答

0

它可以用一系列部件

  • 集合體3個分裂成與A1.request作爲有效載荷和報頭中的其他請求的消息來完成,則第一網關之後,路由器,和變壓器將A2.request移動到有效負載等等,

但是這個流程可能會變得很複雜,很難調試和維護。

將編排代碼放入一個簡單的java類並通過每個http網關的messaging gateway調用每個服務可能會更容易。

即發送消息A到<service-activator/>,其中有3個網關被注入。

拆分,調用gateway1(將消息發送給http1)檢查結果,...,然後聚合並返回最終結果。

編輯

像這樣的東西就是我的意思......

<int:chain ...> 
    <int:splitter ... /> 
    <int:aggregator /> 
    <int:header-enricher> 
     <int:header name="A2" expression="payload.get(1)" /> 
     <int:header name="A3" expression="payload.get(2)" /> 
    </int:header-enricher> 
    <int:transformer expression="payload.get(0)" /> 
</int:chain> 

然後,調用第一門戶,如果成功,將結果保存在一個頭,並使用

<transformer ... expression=headers['A2'] /> 

發送到第二個http等

要測試成功/失敗,可以使用路由器,或者使用簡單的<filter/>,並將故障轉移到丟棄通道。

+0

謝謝加里..我會嘗試第一個選項。對於第二個選項(「將消息A發送到」),你可以舉例嗎?以前我使用這種方式,但我仍然不明白控制調用,有時該方法調用多次,而http內部的客戶端沒有響應。問候。 – Harji

+0

對於第一個選項,你的意思是將頻道(A2.request,A3.Request)添加到header richher中?如何做到這一點。我是新來的SI。問候。 – Harji

+0

查看我的編輯瞭解更多詳情。 –