GlobalRateLimiters

글로벌 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 공유

제약사항

  • 첫 호출 우선: 첫 번째 클라이언트 생성 호출의 설정이 영구 적용

  • 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 초기화 (테스트 전용)