付録I.2 リトライ処理のコード例
リトライ処理のコード例
API(function_xxx)の実行に失敗した場合に、返却されるステータスコードやエラーオブジェクトのエラーメッセージがリトライ条件に該当するかどうかを判定します。このサンプルコードでは、HTTPステータスコードに503(Service unavailable)が返るときと、エラーオブジェクトのメッセージIDでリトライを判断する条件のときに、リトライするよう記載しています。リトライ条件に合致した場合は、指定したリトライ上限回数や間隔でAPIをリトライします。
retry_error_list = ["KART30095-E", "KART30096-E", "KART30003-E", "KART30090-E", ...]
retry_count = 1
from requests.structures import CaseInsensitiveDict
while True:
url = block_storage_api.function_xxx()
r = requests.post(url, headers=headers, auth=USER_CREDENTIAL,
verify=False)
if r.status_code == http.client.OK or r.status_code == http.client.ACCEPTED:
# Succeeded #
print("Succeeded")
break
else:
# failed #
error_code = CaseInsensitiveDict(r.json())["messageId"]
if r.status_code == http.client.SERVICE_UNAVAILABLE or error_code in retry_error_list:
if retry_count > MAX_RETRY_COUNT:
raise Exception("Timeout Error! "
"Operation was not completed.")
print("Retry API")
time.sleep(WAIT_TIME)
retry_count += 1
else:
raise requests.HTTPError(r)
- # Succeeded #
-
APIの実行に成功した場合の処理です。
このコード例では、ステータスコードが200(http.client.OK)と202(http.client.ACCEPTED)の両方を定義しています。処理を実装する際には、APIの処理方式(同期処理と非同期処理)に合わせて定義してください。
- # failed #
-
APIの実行に失敗した場合に、リトライを行う処理です。
ステータスコードが503(http.client.SERVICE_UNAVAILABLE)、またはエラーメッセージがretry_error_listに定義したメッセージIDに合致した場合、指定したリトライ上限回数(MAX_RETRY_COUNT)や間隔(WAIT_TIME)でAPIをリトライします。リトライ上限回数や間隔は、ご利用のシステム設計や運用に合わせて適切に設定してください。