2014-10-07 63 views
0

我有一個使用spring integration和amqp實現的請求/回覆。該請求可能需要很長的時間來處理(他們可能會採取甚至某些情況下,一個小時),由於某種原因,客戶端拋出異常 -spring amqp ReplyRequiredException

​​

我的客戶端配置如下。

<int-amqp:outbound-gateway 
     id="client" 
     request-channel="in" 
     reply-channel="res" 
     exchange-name="reportingServer" 
     routing-key-expression="'report.req.'+headers.id" 
     amqp-template="amqpTemplate" requires-reply="true"> 
     </int-amqp:outbound-gateway> 

我相信回覆超時默認值爲-1,表示無限期地等待,但不知道爲什麼它不工作,任何幫助,將不勝感激。

也有任何已知的問題,在amqp中執行如此長的等待操作,或者它應該會很好嗎?

謝謝

+0

超時時間在amqpTemplate上配置,並且沒有任何問題。雖然我仍然想知道是否有任何等待時間太長或需要其他配置的問題,謝謝。 – Mark1234 2014-10-07 14:53:15

回答

1

這將是罰款,只要你沒有太多的併發請求 - 如果你有線程掛等待答覆的gazillions它不會很好地進行縮放。

如果您需要擴展它,您可以設計一對具有一對出站和入站適配器的異步等效方案,但它比使用網關要複雜一點,實際實施將取決於您的其餘流程。實質上,您必須設置replyTo標題才能使回覆來到入站適配器。

如果您在AMQP網關上游有一個簡單的<gateway/>,則需要確保replyChannel標頭不會丟失。 See Header Channel Registry in this section

+0

嗨加里謝謝,你可以請幫助瞭解它是如何有不同的是有一個單獨的入站適配器,以獲得答覆在出站網關回復通道。入站適配器不會有打開的套接字(因此是線程)來接收響應嗎? – Mark1234 2014-10-08 13:34:40

+0

是的,但答覆需要與請求相關聯 - 這在網關中自動發生,您必須在使用2個單獨的異步端點時「手動」執行此操作;將有一個線程(默認情況下)處理所有的回覆,而不是爲每個回覆掛起一個線程。就像我說過的,如果你期望在進程中有很多併發請求,我需要看到更多的流程來提供具體的建議。 – 2014-10-08 14:24:41