2014-01-24 94 views
0

我們正在使用WSO2ESB克隆並將SOAP請求廣播到我們在IIS上託管的所有Web服務。最近我們切換到nhttp運輸。它被配置爲推薦here但不活動期後,每次我們wso.logWSO2 ESB HTTP連接被遠程主機強制關閉

[HTTP Sender I/O dispatcher-4] ERROR ClientHandler I/O error : An existing connection was forcibly closed by the remote host For : 127.0.0.1:4148 
java.io.IOException: An existing connection was forcibly closed by the remote host 
    at sun.nio.ch.SocketDispatcher.read0(Native Method) 
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) 
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) 
    at sun.nio.ch.IOUtil.read(IOUtil.java:197) 
... 

活動週期的長短取決於在IIS中配置爲特定的Web服務'Connection Time-out value' encount異常。看起來像WSO2 ESB並沒有關閉所有打開的套接字連接,並且在超時期限到期時IIS取而代之。

是否有辦法避免這種異常?它似乎沒有造成一些性能缺陷,但在錯誤日誌中看起來相當混亂。

我們的配置,負責線程數和超時情況如下:

nhttp.properties文件:

http.socket.timeout=120000 
nhttp_buffer_size=16384 
http.tcp.nodelay=1 
http.connection.stalecheck=0 
http.block_service_list=false 

synapse.properties文件:

synapse.threads.core = 40 
synapse.threads.max = 100 
#synapse.threads.keepalive = 5 
#synapse.threads.qlen = 10 
#synapse.threads.group = synapse-thread-group 
#synapse.threads.idprefix = SynapseWorker 

synapse.sal.endpoints.sesssion.timeout.default=600000 
synapse.global_timeout_interval=120000 

回答

0

AFAIU,你的背(部署在IIS上)未能在t內響應他指定了超時值。這意味着,該異常是一種有效的方案,因爲後端服務器會關閉套接字連接。

我認爲你應該檢查爲什麼後端服務沒有很長時間沒有響應。你知道這個的原因嗎?

順便說一下,我猜你正在使用ESB 4.6.0?我建議你使用最新的ESB(4.8.0版),因爲它有很多修補程序,尤其是傳遞傳輸。

傳遞傳輸比nhttp傳輸更好。

+0

後端服務是完全響應,異常中止期間發生的,畢竟響應已發送,並有來自WSO2 ESB沒有其他請求一個Web服務連接超時期限。我會嘗試4.8.0並檢查在那裏情況是否相同。 – user2547004

+0

好的。我不確定這個問題。請嘗試4.8.0並看看。同時,您可以禁用HTTP Keep-Alive並查看。 http://docs.wso2.org/display/ESB480/HTTP+Transport+Properties#HTTPTransportProperties-NOKEEPALIVE –

1

默認情況下,WSO2 ESB將使用'KEEPALIVE'進行連接。 當後端(例如IIS)不使用'KEEPALIVE'時,將導致'現有連接被遠程主機強行關閉'錯誤消息。 使用以下屬性來禁用「KEEPALIVE」:

<property name="NO_KEEPALIVE" value="true" scope="axis2" type="STRING"/> 
相關問題