Timeout kelimesi "Zaman Aşımı" anlamına gelir. Sistem içinde hata olsa bile, hatalı kısmı kullanmaya çalışan alt sistem sonsuza kadar takılıp kalmaz. Belli bir müddet cevap bekledikten sonra hata kodu döner
Timeout yöntemi ile mitigating action yani B planı devreye sokulur.
Timeout Değeri Nasıl Hesaplanır?
Şöyle bir yöntem izlenebilir. 1000 tane isteğin cevap verme süresi bulunur. Tüm cevapların %95'ini kapsayacak bir değer hesaplanır. Bu değer timeout süresidir.
Örnek - Resilience4jElimizde şöyle bir dosya olsun.
Şu satırı dahil ederiz.
<dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-spring-boot2</artifactId><version>1.1.0</version></dependency>
Şöyle yaparızresilience4j.timelimiter:instances:ratingService:timeoutDuration: 3scancelRunningFuture: truesomeOtherService:timeoutDuration: 1scancelRunningFuture: false---rating:service:endpoint: http://localhost:7070/ratings/
import io.github.resilience4j.timelimiter.annotation.TimeLimiter;@Servicepublic class RatingServiceClient {private final RestTemplate restTemplate = new RestTemplate();private String ratingService = ...;@TimeLimiter(name = "ratingService", fallbackMethod = "getDefault")public CompletionStage<ProductRatingDto> getProductRatingDto(int productId){Supplier<ProductRatingDto> supplier = () ->this.restTemplate.getForEntity(this.ratingService + productId,
ProductRatingDto.class).getBody();return CompletableFuture.supplyAsync(supplier);}private CompletionStage<ProductRatingDto> getDefault(int productId, Throwable throwable){return CompletableFuture.supplyAsync(() ->
ProductRatingDto.of(0, Collections.emptyList()));}}
Hiç yorum yok:
Yorum Gönder