FastAPI에서 요청 실패 복구 및 재시도를 구현하는 방법
소개:
웹 애플리케이션을 개발할 때 다른 서비스와 통신해야 하는 경우가 많습니다. 그러나 이러한 서비스에는 일시적인 네트워크 중단이나 응답 시간 초과 등의 오류가 발생할 수 있습니다. 애플리케이션의 안정성을 유지하려면 장애를 복구하고 필요할 때 다시 시도해야 합니다. 이 기사에서는 FastAPI에서 장애 조치 및 요청 재시도를 구현하는 방법을 알아봅니다.
FastAPI는 Python 기반의 최신 웹 프레임워크로 간단하고 효율적인 요청 처리 및 라우팅 기능을 제공합니다. 내부적으로 비동기 방식을 사용하여 요청을 처리하므로 장애 복구 및 재시도 구현이 더 쉽습니다.
오류 복구 및 재시도 구현 아이디어:
오류 복구 및 재시도 기능을 구현하기 전에 먼저 몇 가지 기본 개념을 이해해야 합니다.
위의 아이디어를 바탕으로 회로 차단기 모드 및 재시도 메커니즘을 사용하여 요청 실패 복구 및 재시도를 달성할 수 있습니다.
구현 단계:
다음 코드 예제는 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
两个路由示例来实现请求的故障恢复和重试。retry
路由示例使用一个while循环来进行重试,当请求失败时,会等待一段时间后重新发送请求。circuit_breaker
라우팅 예제를 사용하여 사용자 정의 회로 차단기 클래스를 사용합니다. 오류에 도달하면 사용자 정의 BreakerOpenError 예외가 발생합니다.
결론:
이 기사에서는 FastAPI에서 장애 조치 및 요청 재시도를 구현하는 방법을 배웠습니다. 회로 차단기 패턴과 재시도 메커니즘을 사용하여 애플리케이션의 안정성을 향상하고 오류를 복구할 수 있습니다. 동시에 샘플 코드를 통해 FastAPI에서 장애 복구 및 재시도 기능을 구현하는 방법도 시연했습니다. 이 글이 도움이 되셨으면 좋겠습니다. 읽어주셔서 감사합니다!
위 내용은 FastAPI에서 장애 조치 및 요청 재시도를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!