Global Rate Limiters
글로벌 Rate Limiter 싱글톤 관리자
모든 UFC 클라이언트 인스턴스가 소스별(Yahoo, FRED, BusinessInsider) Rate Limiter를 공유합니다. 이를 통해 여러 클라이언트 인스턴스가 생성되어도 Rate Limit이 배가되지 않습니다.
동작 방식
싱글톤 패턴: 각 소스별로 단일 TokenBucketRateLimiter 인스턴스 유지
Thread-safe: Double-checked locking + @Volatile로 동시성 제어
설정 우선순위: 첫 호출의 설정이 적용되며, 이후 호출은 기존 인스턴스 재사용
사용 예제
// 첫 번째 클라이언트 생성 (RPS 30으로 초기화)
val client1 = YahooClient.create(
YahooClientConfig(
rateLimitConfig = RateLimitConfig(capacity = 30, refillRate = 30)
)
)
// 두 번째 클라이언트 생성 (첫 번째 설정 재사용, RPS 30)
val client2 = YahooClient.create()
// client1과 client2가 같은 Rate Limiter 공유Content copied to clipboard
제약사항
첫 호출 우선: 첫 번째 클라이언트 생성 호출의 설정이 영구 적용
JVM 프로세스 단위: 멀티프로세스 환경에서는 각 프로세스마다 독립적인 싱글톤
설정 변경 불가: 초기화 후 설정 변경 불가 (테스트 환경 제외)
See also
Functions
Link copied to clipboard
fun getBusinessInsiderLimiter(config: RateLimitConfig = RateLimitingSettings.businessInsiderDefault()): TokenBucketRateLimiter
Business Insider API 글로벌 Rate Limiter 획득
Link copied to clipboard
fun getFredLimiter(config: RateLimitConfig = RateLimitingSettings.fredDefault()): TokenBucketRateLimiter
FRED API 글로벌 Rate Limiter 획득
Link copied to clipboard
fun getYahooLimiter(config: RateLimitConfig = RateLimitingSettings.yahooDefault()): TokenBucketRateLimiter
Yahoo Finance API 글로벌 Rate Limiter 획득
Link copied to clipboard
모든 Rate Limiter 초기화 (테스트 전용)