2014-01-24 97 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"/> 
相关问题