FastAPI でリクエスト失敗の回復と再試行を実装する方法
はじめに:
Web アプリケーションの開発では、多くの場合、他のサービスと通信する必要があります。ただし、これらのサービスでは、一時的なネットワークの停止や応答のタイムアウトなどの障害が発生する可能性があります。アプリケーションの信頼性を維持するには、障害から回復し、必要に応じて再試行する必要があります。この記事では、FastAPI でフェイルオーバーとリクエストの再試行を実装する方法を学びます。
FastAPI は、シンプルかつ効率的なリクエスト処理およびルーティング機能を提供する Python ベースの最新の Web フレームワークです。内部的に非同期メソッドを使用してリクエストを処理するため、障害回復と再試行の実装が容易になります。
障害回復と再試行の実装アイデア:
障害回復と再試行機能を実装する前に、まずいくつかの基本概念を理解する必要があります。
上記の考えに基づいて、サーキット ブレーカー モードと再試行メカニズムを使用して、リクエストの失敗の回復と再試行を実現できます。
実装手順:
次のコード例は、FastAPI で障害回復とリクエストの再試行を実装する方法を示しています:
from fastapi import FastAPI import requests app = FastAPI() @app.get("/retry") def retry(): url = "http://example.com/api" # 要请求的URL max_retries = 3 # 最大重试次数 retry_interval = 1 # 重试间隔时间(秒) retries = 0 while retries <= max_retries: try: response = requests.get(url) return response.json() except requests.exceptions.RequestException as error: print(f"Request failed: {error}") retries += 1 time.sleep(retry_interval) return {"message": "Max retries exceeded"} @app.get("/circuit-breaker") def circuit_breaker(): url = "http://example.com/api" # 要请求的URL breaker = Breaker(url, max_failures=3, reset_timeout=10) try: response = breaker.execute(requests.get) return response.json() except BreakerOpenError: return {"message": "Service temporarily unavailable"} class Breaker: def __init__(self, url, max_failures, reset_timeout): self.url = url self.max_failures = max_failures self.reset_timeout = reset_timeout self.failures = 0 self.last_failure = None def execute(self, func): if self.failures >= self.max_failures: if self.last_failure and time.time() - self.last_failure < self.reset_timeout: raise BreakerOpenError() else: self.reset() try: response = func(self.url) self.failures = 0 return response except requests.exceptions.RequestException as error: print(f"Request failed: {error}") self.failures += 1 self.last_failure = time.time() def reset(self): self.failures = 0 self.last_failure = None class BreakerOpenError(Exception): pass
上記のコードでは、 retry
を使用します。および circuit_breaker
は、リクエストの失敗の回復と再試行を実装する 2 つのルーティングの例です。 retry
ルーティングの例では、while ループを使用して再試行します。リクエストが失敗すると、一定時間待機してからリクエストを再送信します。 circuit_breaker
ルーティングの例ではカスタム Circuit Breaker クラスを使用しており、失敗の最大数に達するとカスタム BreakerOpenError 例外がスローされます。
結論:
この記事では、FastAPI で障害回復とリクエストの再試行を実装する方法を学びました。サーキット ブレーカー パターンとリトライ メカニズムを使用することで、アプリケーションの信頼性を向上させ、障害から回復できます。同時に、サンプルコードを使用して、FastAPI に障害回復機能とリトライ機能を実装する方法も示しました。この記事があなたのお役に立てれば幸いです、読んでいただきありがとうございます!
以上がFastAPI でフェイルオーバーとリクエストの再試行を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。