2012-07-28 32 views
4

我無法找到有關網關和服務激活器的回覆處理的文檔。Springs集成的回覆關聯過程詳細信息

如果我有網關,其中: 1)發送請求到信道ReqChannel 2)上接受信道的答覆RepChannel

ReqChannel被連接到路由器,即路由傳入消息到一些服務的活化劑中的一個,讓說AServiceActivator和BServiceActivator,並且該服務激活器具有配置的輸出通道=「RepChannel」。

如果我從不同的線程異步或同時在網關的接口上執行多個方法調用,網關將如何將傳入的答覆與實際的服務調用方相關聯?

回答

7

網關創建一個臨時回覆通道並將其放入消息的標題中。這種機制提供了必要的關聯,因爲每條消息都有自己的回覆通道。

如果最終消費者(如服務激活者)沒有輸出通道,框架會自動將回復發送到replyChannel標頭。

因此,通常不需要在網關上爲最終消費者發送答覆通道。

但是,有些時候這很有用 - 比如如果您想要點擊回覆頻道,或者將其設置爲發佈 - 訂閱頻道,那麼結果會發送到多個位置。

在這種情況下(當網關上有回覆通道,並且最終消費者在那裏發送消息時),框架只是簡單地將顯式聲明的回覆通道與消息頭中的臨時回覆通道橋接。

由於這個原因,在您的流程中保留replyChannel標題非常重要。除非您包含原始消息的replyChannel標頭,否則您不能發送任何回覆通道的任意回覆。

+0

是不是:ReqChannel和service activator上的路由器都會在其輸出上保留回覆通道頭部值?這個值將在網關中與實際的呼叫者進行回覆相關性檢查? – 2012-07-28 20:07:17

+0

是的所有端點通常都保留所有標題(將輸入標題複製到輸出)。一個例外是自定義轉換器,它返回一條消息作爲結果;在這種情況下,由自定義轉換器代碼來複制標題。對於其他組件(包括POJO轉換器),輸入標題總是被複制到輸出消息中,所以應答標題在下游可用。 – 2012-07-29 18:19:21