Iis 远程主机已强制关闭WSO2 ESB HTTP连接

Iis 远程主机已强制关闭WSO2 ESB HTTP连接,iis,wso2,wso2esb,Iis,Wso2,Wso2esb,我们正在使用WSO2ESB克隆SOAP请求并将其广播到托管在IIS上的所有web服务。最近我们转向了nhttptransport。它按照建议进行了配置,但每次在非活动期间之后,我们都会在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:414

我们正在使用
WSO2
ESB
克隆SOAP请求并将其广播到托管在
IIS
上的所有web服务。最近我们转向了
nhttp
transport。它按照建议进行了配置,但每次在非活动期间之后,我们都会在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服务配置的
“连接超时值”
。似乎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.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 
synapse.properties
文件:

http.socket.timeout=120000
nhttp_buffer_size=16384
http.tcp.nodelay=1
http.connection.stalecheck=0
http.block_service_list=false
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 

AFAIU,您的后端服务(部署在IIS上)未能在指定的超时值内响应。这意味着,当后端服务器关闭套接字连接时,该异常是有效的场景

我想你应该检查一下为什么后端服务没有及时响应。你知道原因吗

顺便说一下,我想您正在使用ESB4.6.0?我建议您使用最新的ESB(版本4.8.0),因为它有很多修复程序,特别是对于直通传输


直通传输的性能优于nhttp传输。

默认情况下,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中的设置,并设置以下内容以禁用keepalive:
http.connection.disable.keepalive=true

后端服务响应良好,异常发生在空闲期间,在发送了所有响应并且没有来自WSO2 ESB的其他web服务连接超时请求之后。我会试试4.8.0,看看那里的情况是否相同。我不确定这个问题。请尝试4.8.0并查看。同时,您可以禁用HTTP保持活动状态并查看。