← Kursa Dön
📄 Text · 30 min

Spring Cloud Ekosistemi

Mikroservis mimarisi güçlü bir yaklaşımdır ancak beraberinde ciddi altyapısal zorluklar getirir: servisleri nasıl keşfedersiniz, konfigürasyonu nasıl merkezi yönetirsiniz, bir servis çöktüğünde diğerlerini nasıl korursunuz? Spring Cloud, bu sorunlara production-ready çözümler sunan bir framework ailesidir. Bu derste Spring Cloud ekosisteminin bileşenlerini, kullanım alanlarını ve versiyon uyumluluğunu öğreneceğiz.

Spring Cloud Nedir?

Spring Cloud, mikroservis mimarisinin ortak sorunlarını çözen bir dizi proje topluluğudur. Her biri belirli bir soruna odaklanır:

┌─────────────────────────────────────────────────┐
│               Spring Cloud Ecosystem             │
│                                                  │
│  ┌─────────────┐  ┌──────────────┐              │
│  │   Eureka    │  │ Config Server│              │
│  │  (Discovery)│  │  (Config)    │              │
│  └─────────────┘  └──────────────┘              │
│  ┌─────────────┐  ┌──────────────┐              │
│  │   Gateway   │  │ Resilience4j │              │
│  │  (Routing)  │  │  (Resilience)│              │
│  └─────────────┘  └──────────────┘              │
│  ┌─────────────┐  ┌──────────────┐              │
│  │   OpenFeign │  │  Micrometer  │              │
│  │  (HTTP)     │  │  (Tracing)   │              │
│  └─────────────┘  └──────────────┘              │
│  ┌─────────────┐  ┌──────────────┐              │
│  │ Cloud Stream│  │  Cloud Bus   │              │
│  │ (Messaging) │  │  (Events)    │              │
│  └─────────────┘  └──────────────┘              │
└─────────────────────────────────────────────────┘

Temel Bileşenler

1. Spring Cloud Netflix (Eureka)

Netflix'in open-source ettiği araçların Spring entegrasyonudur. Günümüzde en aktif kullanılan bileşeni Eureka Service Discovery'dir. Servisler kendilerini Eureka Server'a kaydeder, diğer servisler buradan adresleri keşfeder:

User Service → Eureka'ya kayıt: "Ben user-service, 192.168.1.10:8081"
Order Service → Eureka'ya sor: "user-service nerede?" → "192.168.1.10:8081"

2. Spring Cloud Config

Tüm servislerin konfigürasyonunu merkezi bir yerden yönetir. Konfigürasyonlar Git repository'sinde veya dosya sisteminde saklanır. Servisler başlatılırken Config Server'dan konfigürasyonlarını çeker:

Config Server (Git repo) → application.yml
                         → user-service.yml
                         → order-service.yml
                         → user-service-prod.yml

3. Spring Cloud Gateway

Tüm istemci isteklerini karşılayan API Gateway'dir. İstekleri doğru servislere yönlendirir, cross-cutting concern'leri (authentication, logging, rate limiting) merkezi olarak uygular:

Client → Gateway → /users/**  → User Service
                 → /orders/** → Order Service
                 → /products/** → Product Service

4. Spring Cloud Stream

Message broker'lar (RabbitMQ, Apache Kafka) üzerinden asenkron mesajlaşma sağlar. Servisler arası event-driven iletişim için kullanılır:

// Mesaj gönder
streamBridge.send("order-events", new OrderCreatedEvent(orderId));

// Mesaj tüket
@Bean
public Consumer<OrderCreatedEvent> handleOrderCreated() {
    return event -> emailService.sendConfirmation(event);
}

5. Resilience4j

Servisler arası iletişimdeki hataları yönetir: circuit breaker, retry, rate limiter, bulkhead, time limiter. Netflix Hystrix'in yerini almıştır.

6. Spring Cloud OpenFeign

Declarative HTTP client'tır. Sadece bir interface tanımlayarak diğer servisleri çağırabilirsiniz:

@FeignClient(name = "user-service")
public interface UserClient {
    @GetMapping("/api/users/{id}")
    UserDto getUser(@PathVariable Long id);
}

7. Micrometer Tracing

Dağıtık sistemde bir isteğin hangi servislerden geçtiğini izler (distributed tracing). Spring Cloud Sleuth'un yerini almıştır.

Spring Cloud Versiyon Uyumluluğu

Spring Cloud, Spring Boot ile belirli versiyonlarda uyumlu çalışır. Bu uyumu kontrol etmek kritiktir:

Spring CloudSpring Boot
2024.0.x (Moorgate)3.4.x
2023.0.x (Leyton)3.2.x, 3.3.x
2022.0.x (Kilburn)3.0.x, 3.1.x

pom.xml'de Spring Cloud BOM (Bill of Materials) kullanarak versiyon yönetimi yapılır:

<properties>
    <spring-cloud.version>2024.0.0</spring-cloud.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Tipik Mikroservis Mimarisi

Tüm bileşenlerin bir arada çalıştığı tipik bir yapı:

                    ┌─────────────┐
                    │   Client    │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │   Gateway   │←── Auth, Rate Limit, Logging
                    └──────┬──────┘
                           │
            ┌──────────────┼──────────────┐
            │              │              │
     ┌──────▼──────┐┌─────▼──────┐┌──────▼──────┐
     │ User Service ││Order Service││Product Svc  │
     └──────┬──────┘└─────┬──────┘└──────┬──────┘
            │             │              │
            └──────┬──────┴──────┬───────┘
                   │             │
            ┌──────▼──────┐┌────▼────────┐
            │   Eureka    ││Config Server│
            │  (Registry) ││   (Git)     │
            └─────────────┘└─────────────┘

Spring Cloud ekosistemi, mikroservis mimarisinin tüm altyapısal ihtiyaçlarını karşılayan kapsamlı bir çözüm ailesidir. Sonraki derslerde her bileşeni detaylı olarak uygulayacağız.