天天看點

限流功能設計

很早以前做過一個限流的功能,設計地很ugly。今天看到Log4j2的限流過濾器設計的非常好,花了一些時間研究感覺很不錯,以後可能還會再用,總結一下吧。

首先我們要先聊一下限流功能主要是做什麼?其實就是限制某種操作在某段時間内,限制做多少次。

Log4j2的使用了一個 DelayQueue 和一個 ConcurrentLinkedQueue 開發了一個過濾器(burstFilter)比較優雅解決了這個問題。

整體架構如下:

限流功能設計

設計核心邏輯如下:

限流功能設計

burstFilter初始化輯如下:

限流功能設計