我们使用WSO2 ESB来克隆SOAP请求,并将SOAP请求广播到托管在IIS上的所有web服务。最近,我们转向了nhttp传输。它被配置为推荐的这里,但每次在不活动期间之后,我们都会在wso.log中包含一个异常
[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'。似乎WSO2 ESB并没有关闭所有已打开的套接字连接,而是在超时期结束时使用了它。
有办法避免这种例外吗?它似乎没有造成一些性能缺陷,但在错误日志中看起来非常混乱。
我们负责线程计数和超时的配置如下:
nhttp.properties文件:
http.socket.timeout=120000
nhttp_buffer_size=16384
http.tcp.nodelay=1
http.connection.stalecheck=0
http.block_service_list=falsesynapse.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 发布于 2015-10-05 14:45:58
默认情况下,WSO2 ESB将使用“KEEPALIVE”作为连接。当后端(例如IIS)不使用“KEEPALIVE”时,这将导致“现有连接被远程主机强制关闭”错误消息。使用以下属性禁用“KEEPALIVE”:
<property name="NO_KEEPALIVE" value="true" scope="axis2" type="STRING"/>这可能并不直观,但这个“属性”条目被插入到您所连接的后端服务的代理服务的"in“序列中。作者似乎在寻找一个.properties文件中更全局的设置。有,但nhttp.properties和synapse.properties都没有。它将是carbon_home/repository/conf/passthru-http.properties中的设置,并将以下设置设置为禁用保活: http.connection.disable.keepalive=true
发布于 2014-01-24 11:52:25
AFAIU,您的后端服务(部署在IIS上)未能在指定的超时值内响应.这意味着,异常是一个有效的方案,因为后端服务器关闭套接字连接。
我认为你应该检查一下为什么后端服务没有及时响应。你知道原因吗?
顺便问一下,我想您正在使用ESB 4.6.0吗?我建议您使用最新的ESB (4.8.0版本),因为它有很多修复,特别是在传递传输方面。
通过传输比nhttp传输性能更好。
https://stackoverflow.com/questions/21327584
复制相似问题