1. 程式人生 > >exp:分散式限流

exp:分散式限流

方法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