2つのWebサービスとフロントエンドアプリケーションをデプロイするために実行するスクリプトがあります。スクリプトは、2つのバックエンドサービスが稼働中であるかどうかを確認するメソッドを呼び出します。その場合、デプロイは成功したとみなし、そうでない場合は元に戻します。
2つのサービスは、フロントエンドよりも起動に時間がかかる場合があります。現在、Webサービスチェックを遅らせるためにスリープコールを入れています。これにより、起動する時間を確保できます。
このスリープを削除して再試行メカニズムを追加して、サービスがダウンした場合に、応答が返されるまでチェックを繰り返し再試行するようにします。
Tpは、デバイスが起動しているかどうかを確認します。curlを使用します。 curlには再試行メカニズムがあると読みましたが、使用したことはありません。
この問題を解決した人はいますか?解決する際に考慮しなければならないことを理解したい。サービスからHTTP 200を取得するまで再試行しますか?
誰も私がこれをテストする方法を提案しますか?ダウンしていたサービスを見つける必要があります。
編集:-retryは一時的なエラーのみに反応するようです。「一時的なエラーとは、タイムアウト、FTP 4xx応答コード、またはHTTP 5xx応答コードのいずれかを意味します」。私のサービスは404を返すことができるため、カールの再試行は私の解決策ではありません。
次のステートメントは、5秒の接続タイムアウトで5回または最大40秒を再試行します。指数バックオフポリシーはありません
curl --connect-timeout 5 \
--max-time 10 \
--retry 5 \
--retry-delay 0 \
--retry-max-time 40 \
'http://your_url'
--max-time 10 (how long each retry will wait)
--retry 5 (it will retry 5 times)
--retry-delay 0 (an exponential backoff algorithm)
--retry-max-time (total time before it's considered failed)
接続が拒否された場合でも再試行する--retry-connrefuse
もあることに注意してください。
誰でも新しい混乱を避けるために...
参照してください: https://curl.haxx.se/docs/manpage.html
- リトライ
Curlが転送を実行しようとしたときに一時的なエラーが返された場合、この回数だけ再試行してからgivingめます。数値を0に設定すると、curlは再試行しません(これがデフォルトです)。一時的なエラーは、タイムアウト、FTP 4xx応答コード、またはHTTP 5xx応答コードのいずれかを意味します。
Curlが転送を再試行しようとすると、最初に1秒間待機し、その後のすべての再試行に対して10分間に達するまで待機時間が2倍になり、残りの再試行間の遅延になります。 --retry-delayを使用すると、この指数バックオフアルゴリズムを無効にできます。関連項目--retry-再試行に許可される合計時間を制限するmax-time。
このオプションを複数回使用すると、最後のオプションが使用されます。
7.12.3で追加されました。
--max-time 10
を使用すると、10秒前に接続が切断されるため、ダウンロード時に役立ちません。
以下は、5秒の遅延と30秒の接続タイムアウトで300回再試行します
curl \
--connect-timeout 30 \
--retry 300 \
--retry-delay 5 \
URL