exp:分散式限流
阿新 • • 發佈:2018-12-04
方法1:
採用分散式每個節點單獨控制限流的方式。
就是如果總限流10000,4個節點,每個節點限制2500即可(前提是負載均衡,每個節點均勻服務)。
程式碼見:
https://github.com/lifan2/lfLearn/tree/master/src/main/java/com/lflearn/ratelimiter2
現在要對某方法mm限流,在方法上註解了@RateLimiterAnno
注意,如果mm是被其他方法呼叫的,必須使mm方法呼叫採用**Service.mm的形式
@Service public class TestService2 { // 特殊 @Resource private TestService2 testService2; public void printNum2(int order){ // 特殊 testService2.printNum(i); } @RateLimiterAnno(limiterName = "printLimiter",limitCount = 30) public void printNum(int order) { System.out.println(Thread.currentThread().getName() + ":" + order ); } } printNum2裡呼叫printNum,如果不採用特殊的寫法,註解不會起到作用。
具體自定義註解失效原因分析:https://blog.csdn.net/li12412414/article/details/81012952
測試時用執行緒池跑多個執行緒,程式碼見上面github地址。
方法2:
如果僅僅是搶令牌,沒搶到也沒事就不執行的這種,可以採用Redis +Lua的方式限流。
程式碼見:
https://github.com/lifan2/lfLearn/tree/master/src/main/java/com/lflearn/ratelimiter