Şuayb'in BloguŞuayb'in Blogu
Ana Sayfa
Kategoriler
Oyunlar
MediumHakkındaİletişim
Dil
Tema
    1. Blog
    2. Programlama
    3. Spring Boot Circuit Breaker

Spring Boot Circuit Breaker

İlk yayın13 Mart 2025
Son güncelleme14 Mart 2025
Okuma süresi3 dk okuma
JavaKotlinSpring BootSpring CloudCircuit BreakerMikroservis
XLinkedInFacebook
Spring Boot Circuit Breaker

Beğeni yükleniyor...

Spring Boot Circuit Breaker, mikro hizmetler mimarisinde ardışık hataların önlenmesi için kullanılan bir hata toleransı mekanizmasıdır. Hataları algılayarak ve sağlıksız hizmetlere aşırı istekleri durdurarak uygulamaların hataları zarif bir şekilde yönetmesine yardımcı olur. Bu kılavuz, Spring Boot'ta Resilience4j kullanarak Circuit Breaker uygulamasını adım adım açıklamaktadır.


Son güncelleme14 Mart 2025

Toplam görüntülenmeGörüntülenme yükleniyor...

Önceki makaleSpring Boot Eureka ServerSonraki makaleSpring Boot ile Test Odaklı Geliştirme
Şuayb Şimşek

Yazan

Şuayb Şimşek

Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.

Uzmanlık

  • Spring Boot
  • Go
  • Mikroservis
  • Next.js
  • Cloud Native

Bağlantılar

GitHubLinkedInMedium

Benzer yazılar

Spring Boot Eureka Server
Programlama

Spring Boot Eureka Server

Mikro hizmet mimarisinde servis keşfi için Spring Boot Eureka serverın nasıl kurulacağını ve yapılandırılacağını öğrenin.

23 Şubat 20253 dk okuma
JavaKotlinSpring BootSpring CloudEureka ServerMikroservis
Spring Boot Config Server
Programlama

Spring Boot Config Server

Spring Boot Config Server kullanarak merkezi yapılandırma yönetimini nasıl gerçekleştireceğinizi öğrenin.

22 Şubat 20253 dk okuma
JavaKotlinSpring BootSpring CloudConfig ServerMikroservis
Spring Boot Kubernetes Entegrasyonu
Programlama

Spring Boot Kubernetes Entegrasyonu

Spring Boot uygulamalarını Kubernetes üzerinde nasıl ölçeklenebilir ve konteyner tabanlı olarak dağıtabileceğinizi öğrenin.

21 Şubat 20253 dk okuma
JavaKotlinSpring BootKubernetesMikroservisKonteynerizasyon

Hakkımda

Spring Boot, mikroservis, güvenlik ve daha fazlası hakkında yazılar.

İletişimYeni başladıysan

Son yazılar

  • Captain Tsubasa 2: World Fighters
  • Captain Tsubasa: Rise of New Champions
  • Spring Boot Configuration Properties
  • Spring Boot GraphQL JWE Kimlik Doğrulama
  • Spring Boot JPA ile JWE Kimlik Doğrulaması

Popüler konular

JavaKotlinSpring BootGüvenlikJWEJWT

Abone ol

Yeni yazılar yayınlandığında pratik backend ve fullstack notlarını al.

Sosyal

© 2024-2026 Şuayb'in Blogu. Tüm hakları saklıdır.

🌟 Neden Circuit Breaker Kullanmalıyız?

Bu bölümde Neden Circuit Breaker Kullanmalıyız? konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.

  • Mikro hizmetlerde zincirleme hataları önler.
  • Uygulama dayanıklılığını artırır, aşırı hatalı istekleri durdurur.
  • Hizmet sağlığı geri kazandığında otomatik olarak iyileşir.
  • Gereksiz bekleme sürelerini önleyerek gecikmeyi azaltır.
  • Hataları yönetmek için yapılandırılabilir yeniden deneme stratejileri sunar.

📋 Gereksinimler

Aşağıdakilere sahip olduğunuzdan emin olun:

  • ☕ Java Development Kit (JDK) 17+
  • 📞 Maven veya Gradle kurulu
  • 🌐 Spring Boot & Spring Cloud
  • 🧐 Circuit Breaker davranışını göstermek için bir REST API

🛠️ Adım 1: Bağımlılıkları Ekleyin

Bu bölümde Adım 1: Bağımlılıkları Ekleyin konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.

Maven:

XMLpom.xml
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>

Gradle:

GROOVYbuild.gradle
implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j'

🛠️ Adım 2: Circuit Breaker Özelliklerini Yapılandırma

application.yml dosyanızda Circuit Breaker ayarlarını tanımlayın.

YAMLconfig.yml
resilience4j:
  circuitbreaker:
    instances:
      externalService:
        failure-rate-threshold: 50
        slow-call-rate-threshold: 50
        slow-call-duration-threshold: 2000ms
        permitted-number-of-calls-in-half-open-state: 3
        sliding-window-size: 10
        minimum-number-of-calls: 5
        wait-duration-in-open-state: 5s

🛠️ Adım 3: Circuit Breaker Kullanarak Bir REST Servisi Uygulama


🛠️ Adım 4: Bir REST Controller Oluşturun


▶️ Uygulamayı Çalıştırma

Uygulamayı başlatın:

BASH
./mvnw spring-boot:run

veya Gradle kullanarak:

BASH
gradle bootRun

🧪 Circuit Breaker'ı Test Etme

Circuit Breaker’ı test etmek için:

BASH
curl -X GET http://localhost:8080/api/data

🏁 Sonuç

Artık Spring Boot Circuit Breaker için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.

JAVAExternalService.java
package com.example.circuitbreaker.service;

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ExternalService {

    private final RestTemplate restTemplate = new RestTemplate();

    @CircuitBreaker(name = "externalService", fallbackMethod = "fallbackResponse")
    public String callExternalAPI() {
        return restTemplate.getForObject("http://unreliable-service/api/data", String.class);
    }

    public String fallbackResponse(Exception e) {
        return "Fallback response: Service is unavailable!";
    }
}
KOTLINExternalService.kt
package com.example.circuitbreaker.service

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker
import org.springframework.stereotype.Service
import org.springframework.web.client.RestTemplate

@Service
class ExternalService {
    private val restTemplate = RestTemplate()

    @CircuitBreaker(name = "externalService", fallbackMethod = "fallbackResponse")
    fun callExternalAPI(): String {
        return restTemplate.getForObject("http://unreliable-service/api/data", String::class.java) ?: ""
    }

    fun fallbackResponse(e: Exception): String {
        return "Fallback response: Service is unavailable!"
    }
}
JAVACircuitBreakerController.java
package com.example.circuitbreaker.controller;

import com.example.circuitbreaker.service.ExternalService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class CircuitBreakerController {

    private final ExternalService externalService;

    public CircuitBreakerController(ExternalService externalService) {
        this.externalService = externalService;
    }

    @GetMapping("/data")
    public String fetchData() {
        return externalService.callExternalAPI();
    }
}
KOTLINCircuitBreakerController.kt
package com.example.circuitbreaker.controller

import com.example.circuitbreaker.service.ExternalService
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/api")
class CircuitBreakerController(private val externalService: ExternalService) {

    @GetMapping("/data")
    fun fetchData(): String {
        return externalService.callExternalAPI()
    }
}