GuavaのRateLimiterはインタフェースの制限流を実現する
1769 ワード
最近の開発ニーズではバックグラウンドインタフェースを限流処理する必要があり,基本的な使い方を整理した.
まずguava依存性を追加します.
その後、パッケージRateLimiterはマルチインタフェースの制限を適用します.
RateLimiterFactoryを使用して、インタフェースの制限を実現します.
以上がRateLimiterがインタフェースのストリーム制限を実現する一般的な使用であり、最初のメッセージはmarkである.
まずguava依存性を追加します.
com.google.guava
guava
23.0
その後、パッケージRateLimiterはマルチインタフェースの制限を適用します.
import com.google.common.util.concurrent.RateLimiter;
import org.springframework.util.StringUtils;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
public class RateLimiterFactory {
private static ConcurrentHashMap limiterMap = new ConcurrentHashMap<>(); // private static double permitsPerSecond = 1000; // private static long timeout = 4L; /** *@param apiId id *@description */ public static boolean tryAcquire(String apiId) { // apiId true if (StringUtils.isEmpty(apiId)) { return true; } limiterMap.putIfAbsent(apiId, RateLimiter.create(permitsPerSecond)); return limiterMap.get(apiId).tryAcquire(timeout, TimeUnit.SECONDS); } }
RateLimiterFactoryを使用して、インタフェースの制限を実現します.
@Controller
public class TestController {
...
@RequestMapping("/test")
@ResponseBody
public String test(){
if(!RateLimiterFactory.tryAcquire(ApiInfo.TEST)) {
return " !"; } ... } }
以上がRateLimiterがインタフェースのストリーム制限を実現する一般的な使用であり、最初のメッセージはmarkである.