6

SOAP メッセージを Service Provider に送信する SOAP クライアントを実装したフローがあります。

失敗した場合は、サービス コールを 3 回再試行する必要があります。そのため、スコープが成功するまで内部で HTTP アウトバウンド エンドポイントを使用しました。

期待どおりに再試行していますが、成功シナリオの場合、サービスから応答を取得しても、次のようなタイムアウト エラーが発生します。

[DispatchThread: 1] org.apache.cxf.endpoint.ClientImpl: 操作 { http://support.cxf.module.mule.org/ } 呼び出しへの応答を待機中にタイムアウトしました。

観察:

until を正常に削除し、HTTP アウトバウンド エンドポイントを直接取得しました。この場合、タイムアウト エラーは発生しません。

私は後で成功するまで試してみましたが、応答を受け入れるための確認式がありましたが、それでも同じタイムアウト応答です。

failureExpression="#[message.inboundProperties['http.status'] != 200]" ackExpression="#[message.correlationId]"

応答を受け入れ、タイムアウトエラーをスローしないように成功するまでを構成する方法を提案してください。

4

2 に答える 2

2

これackExpressionは、「応答を受け入れる」とは関係ありません。フローが現在のイベントをuntil-successfulメッセージ プロセッサに渡した後に、新しいメッセージ ペイロードとして使用される値を生成するためのものです。

アウトバウンド HTTP エンドポイントに を設定してみてresponse-timeout、それが役立つかどうかを確認してください。until-successfulスコープのコンテキストで使用されるデフォルトのタイムアウトが大きすぎて、この問題が発生している可能性があります。

于 2013-10-30T21:49:32.557 に答える
1

これに対する解決策を見つけました。

以前は、Until-Successful 内に HttpOutbound エンドポイントしかなく、タイムアウトの問題に直面していました。

これで、Until-successful スコープ内にも Soap コンポーネントを含めましたが、正常に動作しています。

成功するまで内部にコンポーネントを 1 つしか持てないようにするため、soap コンポーネントと HttpOutbound エンドポイントをプロセッサ チェーン内にラップしました。

   <until-successful objectStore-ref="objectStore"
            maxRetries="3" secondsBetweenRetries="2" deadLetterQueue-ref="xxxx"
            doc:name="UntilSuccessfulService"  >                
            <processor-chain doc:name="Processor Chain">
                <cxf:jaxws-client operation="Request1" serviceClass="xxxxxxx" enableMuleSoapHeaders="true" doc:name="SOAP"/>
               <http:outbound-endpoint exchange-pattern="request-response" method="POST"  doc:name="HTTP" host="localhost" path="cService" port="xxxx" connector-ref="HTTP_HTTPS"/>                   
           </processor-chain>                
    </until-successful> 

デビッドとすべての回答に感謝します。

于 2013-11-01T18:41:23.320 に答える