我们在ESB 4.5.1中遇到了WSO2标注中介的问题。
假设一个简单的代理:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="EchoWrapper" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<callout serviceURL="http://[MY_HOSTNAME]:8280/services/echo?wsdl" action="urn:echoInt">
<source xmlns:ns="http://org.apache.synapse/xsd" xpath="$body/*[1]"/>
<target key="calloutBody"/>
</callout>
<property name="RESPONSE" value="true" scope="default" type="STRING"/>
<header name="To" value="http://www.w3.org/2005/08/addressing/anonymous"/>
<log level="full"/>
<send/>
</inSequence>
</target>
<publishWSDL uri="http://[MY_HOSTNAME]/services/echo?wsdl"/>
<description></description>
</proxy>
..如果我发生错误,即传递一个预期有int的字符串,我将得到一个立即错误响应,一个慢速错误响应,然后端点将变为完全不活动,即使对于有效消息。在日志中,我们看到:
org.apache.commons.httpclient.ConnectionPoolTimeoutException:超时等待连接 在org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:497) 在org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416) 在org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153) 在org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) ...
有什么想法吗?
答案 0 :(得分:1)
似乎已在其他地方(https://wso2.org/jira/browse/ESBJAVA-922)报告此问题。发生异常的是,在抛出异常时不会清除连接,这实际上意味着这个版本的callout mediator在收到故障或超时时实际上是无用的。
如何解决这个问题的细节 - 我认为非常关键 - 可以在上面的链接中找到,只需添加一行来清理catch块中的连接。