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 が予期される場所に文字列を渡すと、1 つの即時エラー応答と 1 つの遅いエラー応答が返され、エンドポイントは有効なメッセージであっても完全に非アクティブになります。ログには、次のように表示されます。

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) ...

何か案は?

4

1 に答える 1

1

この問題は別の場所で報告されているようです ( https://wso2.org/jira/browse/ESBJAVA-922 )。何が起こるかというと、例外がスローされたときに接続がクリーンアップされないということです。つまり、このバージョンのコールアウト メディエーターは、フォールトまたはタイムアウトを受け取ったときに事実上役に立たないことを意味します。

この問題を修正する方法の詳細 (これは非常に重要であると言えます) は、上記のリンクで入手できます。catch ブロックの接続をクリーンアップする行を追加するだけです。

于 2013-01-28T14:42:01.843 に答える