← Bütün Patternlər
⏱️

Timeout Pattern

Bir sorğunun sonsuza qədər gözləməsini əngəlləmək üçün maksimum icazə zamanı (deadline) tətbiq etmək.

🎯
Nə üçün lazımdır?

Cavab gəlməyən servisə sonsuza qədər gözləmək Thread-i bloklayır. Bu da digər istifadəçilərin xətə almasına gətirib çıxarır.

⚙️
2 növ timeout

Connection Timeout: TCP bağlantısının qurulması üçün. Read Timeout: Bağlantı qurulub, amma cavab gözlənilir.

🛠️
Tətbiq yerləri

RestTemplate, WebClient, Feign Client, gRPC deadlines, JDBC connection pool.

İNTERAKTİV

Vizual İzah

Mərhələ {{ currentStep + 1 }}: {{ steps[currentStep].title }}

A
Service A
Maks: 3 san
{{ timeElapsed.toFixed(1) }}s
⏳ Gözləyir...
⚠️ TIMEOUT!
B
Service B
⚙️ İşləyir (yavaş)...
⚙️ Hələ işləyir...
JAVA

Kod Nümunəsi

RestClientConfig.java
@Configuration
public class RestClientConfig {

    @Bean
    public RestTemplate restTemplate() {
        var factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(2000);  // TCP bağlantı: maks 2 san
        factory.setReadTimeout(3000);     // Cavab gözlə: maks 3 san
        return new RestTemplate(factory);
    }
}

// Feign Client ilə
@FeignClient(name = "payment",
    configuration = PaymentFeignConfig.class)
public interface PaymentClient {
    @GetMapping("/pay")
    PaymentResult process(PaymentRequest req);
}

public class PaymentFeignConfig {
    @Bean
    public Request.Options options() {
        return new Request.Options(
            2, TimeUnit.SECONDS,   // connectTimeout
            3, TimeUnit.SECONDS,   // readTimeout
            true);
    }
}
✅ Üstünlükləri
  • Thread-lərin sonsuz bloklanamasının qarşısını alır
  • Fail Fast — tez xəta verib resurs azad edir
  • Circuit Breaker ilə güclü birləşmə
⚠️ Riskləri
  • Çox qısa timeout yalançı xətalar yaradır
  • Çox uzun timeout-un mənası olmur
  • Downstream timeout chain-i düzgün planlaşdırmalıdır