转载 【DZone】Rate Limiter Internals in Resilience4j:https://dzone.com/articles/rate-limiter-internals-in-resilience4j
Resilience4j 的 resilience4j-ratelimiter 模块 提供了两种限流的实现:SemaphoreBasedRateLimiter 和 AtomicRateLimiter。
SemaphoreBasedRateLimiter 基于信号量实现,用户的每次请求都会申请一个信号量,并记录申请的时间,申请通过则允许请求,申请失败则限流,另外有一个内部线程会定期扫描过期的信号量并释放,很显然这是令牌桶的算法。
AtomicRateLimiter 和上面的经典实现类似,不需要额外的线程,在处理每次请求时,根据距离上次请求的时间和生成令牌的速度自动填充。关于这二者的区别可以参考这篇文章 Rate Limiter Internals in Resilience4j。