限流功能设计

很早以前做过一个限流的功能,设计地很ugly。今天看到Log4j2的限流过滤器设计的非常好,花了一些时间研究感觉很不错,以后可能还会再用,总结一下吧。

首先我们要先聊一下限流功能主要是做什么?其实就是限制某种操作在某段时间内,限制做多少次。

Log4j2的使用了一个 DelayQueue 和一个 ConcurrentLinkedQueue 开发了一个过滤器(burstFilter)比较优雅解决了这个问题。

整体架构如下:


限流功能设计
 

设计核心逻辑如下:


限流功能设计
 

burstFilter初始化辑如下:

限流功能设计
 
 

相关推荐