0

我们在 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.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java: 416) 在 org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153) 在 org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) ...

有任何想法吗?

4

1 回答 1

1

似乎此问题已在其他地方报告(https://wso2.org/jira/browse/ESBJAVA-922)。发生的情况是,当抛出异常时连接没有被清理,这实际上意味着这个版本的 callout mediator 在收到错误或超时时实际上是无用的。

上面的链接中提供了有关如何解决此问题的详细信息(我想说这非常关键),只需添加一行以清理 catch 块中的连接即可。

于 2013-01-28T14:42:01.843 回答