2017-09-07 60 views
1

這是一個後續行動這樣一個問題:回覆消息接收,但接收線程已退出由於超時

Spring Integration Aggregator failing - "No reply received within timeout" message being displayed

在繼續測試在WebSphere 8.5我的POC,問題重新浮出水面,其中本從天而降錯誤:

GenericMessagW¯¯org.springframework.messaging.core.GenericMessagingTemplate $ TemporaryReplyChanne升發送回覆消息中接收但接收線程已經退出由於超時:的ErrorMessage [有效載荷= org.springframework。 messaging.MessageHandlingExcept離子:在消息處理程序發生錯誤[productAggregator.generateAggregatedResponse.aggregator.han dler];嵌套異常是java.lang.NullPointerException,headers = {id = d0b52beb-e9bd-0ba2-6062-6ee83b847c4a,timestamp = 1504755248824}]。

我看到這種情況的發生,一旦聚合開始,但有什麼不清楚的是嵌套異常「顯示java.lang.NullPointerException」,什麼這裏值是導致超時。另一個問題是,如果聚合器在其輸入通道上有一個「等待」的默認超時值,之後它會停止等待,從而導致超時。

任何指針將不勝感激,而我繼續調試。

真誠, 巴拉斯

回答

2

打上了一個大大的try/catch在你的聚合代碼,找出NPE被拋出在哪裏。

該消息由某個上游消息傳遞網關(或直接使用MessagingTemplate)生成,其中調用線程已超時,並且此模板接收到異步異常。

+0

你必須顯示你的'productAggregator.generateAggregatedResponse.aggregator.han dler'。看起來這是NPE發生的地方。根本沒有任何與Aggregator組件相關的東西。聚合器上游只有一個網關,並且由於NPE導致我們發生'timeout'錯誤,因此您的自定義代碼沒有正常答覆。 –

+0

謝謝加里,阿爾喬姆 - 我找到並修復了NPE。現在,聚合器正在將聚合消息發送到其outputChannel(X)。有一個自定義轉換器可以獲取這個消息,將其轉換並放到它的outputChannel(Y)上,這也是完美的。最後一步是從(Y)中讀取http網關,此時還有另一個「發送應答消息,但接收線程已由於超時而退出」消息。請注意,(Y)上的消息具有合適的有效負載/頭文件,且不包含任何NULL - HTTP網關是否有默認超時w.r.t回覆通道? – bmylavar

+0

入站網關的默認超時值爲1000毫秒;你可以使用'reply-timeout'屬性來增加它。當HTTP線程返回到網關時,超時開始;對於具有異步子流程的流程,通常建議將超時時間增加到比您期望流程所用時間更長的時間。 –