본문 바로가기

Languages/java

RateLimiter 예제

728x90
반응형
public class Main{
    public static void main(String[] args) throws InterruptedException {
            RateLimiterExample rateLimiterExample = new RateLimiterExample();
            for(int i = 0; i < 999999999; i++){
                rateLimiterExample.test2(i);
            }
    }
}
import com.google.common.util.concurrent.RateLimiter;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class RateLimiterExample {

//    public RateLimiter rateLimiterTemp;
    RateLimiter limiterTemp = RateLimiter.create(20.0);

//    RateLimiterExample(RateLimiter rateLimiterTemp){
//        this.rateLimiterTemp = rateLimiterTemp; // injection of obejct
//    }
    public String getDate(){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
                long timeInMillis = System.currentTimeMillis();
                Date timeInDate = new Date(timeInMillis);
        return sdf.format(timeInDate) +" : ";
    }
    public void test2(int iRateChangePos) throws InterruptedException {

        if(iRateChangePos == 50000000 ){
            limiterTemp = RateLimiter.create(5.0);
            System.out.println("rate has changed!!");
            System.out.println("rate has changed!!");
            System.out.println("rate has changed!!");
            System.out.println("rate has changed!!");
        }

        if(iRateChangePos == 100000000 ){
            limiterTemp = RateLimiter.create(30.0);
            System.out.println("rate has changed!!");
            System.out.println("rate has changed!!");
            System.out.println("rate has changed!!");
            System.out.println("rate has changed!!");
        }


        if(this.limiterTemp.tryAcquire() == true){
            System.out.println(getDate() +"!!--OK--");
        }else{
//            System.out.println(getDate() +"XX");
        }
//        Thread.sleep(100);
    }
    public void test() throws InterruptedException {
        System.out.println(getDate() + "test function start");
        RateLimiter limiter = RateLimiter.create(20.0);
        //per senc executable rate count
        Timer timer = new Timer(true);
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                if (limiter.tryAcquire()) {
                    System.out.println(getDate() +"!! OK");
                } else {
                    System.out.println(getDate() +"XX");
                }
            }
        }, 0, 10); // 0.1초마다 실행

        Thread.sleep(1500);
        System.out.println(getDate() +"test function end");
    }
}
728x90
반응형