WSO2 ESBを使用してAPIリクエストをルーティングすると、Herokuでホストされているアプリケーションにプロキシサービスを介して送信されます。WSO2 ESB:タイムアウト後にHTTP要求を再試行
ここ数日、私たちはHerokuアプリケーションへの接続が時々タイムアウトすることに気づいたため、クライアントプロセス全体が失敗しました。
これらのリクエストは長いプロセス(ビデオトランスコード)の一部であるため、40個のリクエストのうち1つが失敗したという理由だけで、プロセス全体を再起動することは実際の選択肢ではありません。失敗したすべての要求を自動的に再試行するのが最善です(またはn)。
"タイムアウトで再試行"をクライアントコードに直接実装するのは難しいので、タイムアウトしたすべての要求を再試行するようにエンドポイントを設定することで、問題を処理できると考えました。 The WSO2 ESB documentation on endpoint error handlingは、 "まれなメッセージの失敗が受け入れられない"場合の正確なユースケースを扱い、1つのリーフエンドポイントしか含まないフェールオーバーグループをセットアップすることによって可能であることを通知します。
はしかし、提供されたサンプル構成がメッセージを落とし続けているように見える:
<endpoint name="SampleFailover">
<failover>
<endpoint name="Sample_First" statistics="enable" >
<address uri="http://localhost/myendpoint" statistics="enable" trace="disable">
<timeout>
<duration>60000</duration>
</timeout>
<markForSuspension>
<errorCodes>101504, 101505, 101500</errorCodes>
<retriesBeforeSuspension>3</retriesBeforeSuspension>
<retryDelay>1</retryDelay>
</markForSuspension>
<suspendOnFailure>
<initialDuration>1000</initialDuration>
<progressionFactor>2</progressionFactor>
<maximumDuration>64000</maximumDuration>
</suspendOnFailure>
</address>
</endpoint>
</failover>
</endpoint>
私はまだのようなwso2carbon.log
にログエントリを見ている:私はここで何をしないのです
[2016-04-13 16:02:50,576] WARN - Expiring message ID : urn:uuid:fd515b80-8d67-47e5-b409-0ec39ed58fc6; dropping message after timeout of : 60 seconds {org.apache.synapse.core.axis2.TimeoutHandler}
?