13 Eylül 2021 Pazartesi

Resilience4j @RateLimiter Anotasyonu

Maven
Şu satırı dahil ederiz. @RateLimiter anotasyonu kullanılır
<dependency>
  <groupId>io.github.resilience4j</groupId>
  <artifactId>resilience4j-spring-boot2</artifactId>
  <version>1.7.1</version>
</dependency>
Örnek
Elimizde şöyle bir dosya olsun
resilience4j.ratelimiter.instances.default.limit-for-period=100
resilience4j.ratelimiter.instances.default.limit-refresh-period=5s
Şöyle yaparız
@GetMapping("ms1")
@RateLimiter(name="default")
public String callingMS2() {
  return "MS1 can handle only 100 requests per 5 seconds");
}
Örnek
Elimizde şöyle bir dosya olsun. Burada stockService için 5 saniyede bir istek kabul edileceği belirtiliyor.
resilience4j.ratelimiter:
  instances:
    stockService:
      limitForPeriod: 1
      limitRefreshPeriod: 5s
      timeoutDuration: 0s
Açıklaması şöyle
limitRereshPeriod is the interval — in our case it is 5 seconds
limitForPeriod is number of requests to make every 5 seconds. In our case, it should be just 1. We want to make only one call every 5 second. All other requests should not be allowed within the 5 second window
timeoutDuration — additional requests within the 5 seconds should be timedout immediately.
Şöyle yaparız
import io.github.resilience4j.ratelimiter.annotation.RateLimiter; @Service
public class StockService {

  @RateLimiter(name="stockService", fallbackMethod = "getFallbackStocks")
  public List<StockPrice> getStocks() {
    ...
  }

  public List<StockPrice> getFallbackStocks(Exception e) {
    return ...;
  }
}

Hiç yorum yok:

Yorum Gönder