很早以前做過一個限流的功能,設計地很ugly。今天看到Log4j2的限流過濾器設計的非常好,花了一些時間研究感覺很不錯,以後可能還會再用,總結一下吧。
首先我們要先聊一下限流功能主要是做什麼?其實就是限制某種操作在某段時間内,限制做多少次。
Log4j2的使用了一個 DelayQueue 和一個 ConcurrentLinkedQueue 開發了一個過濾器(burstFilter)比較優雅解決了這個問題。
整體架構如下:
設計核心邏輯如下:
burstFilter初始化輯如下:
很早以前做過一個限流的功能,設計地很ugly。今天看到Log4j2的限流過濾器設計的非常好,花了一些時間研究感覺很不錯,以後可能還會再用,總結一下吧。
首先我們要先聊一下限流功能主要是做什麼?其實就是限制某種操作在某段時間内,限制做多少次。
Log4j2的使用了一個 DelayQueue 和一個 ConcurrentLinkedQueue 開發了一個過濾器(burstFilter)比較優雅解決了這個問題。
整體架構如下:
設計核心邏輯如下:
burstFilter初始化輯如下: