Spring Cloud — набор проектов (надстройка над Spring Boot), которые решают типовые задачи микросервисной архитектуры:
- регистрация сервисов,
- балансировка нагрузки,
- конфигурация,
- отказоустойчивость,
- взаимодействие через сообщения,
- распределённый трейсинг.
Spring Cloud не привязан к одной технологии — он оборачивает популярные решения (Eureka, Consul, Zookeeper, Netflix OSS, Kubernetes API и др.) в привычный для Spring Boot интерфейс.
-
Централизованное хранилище конфигурации (Git, SVN, Vault, файловая система).
-
Приложение поднимается, тянет конфиг с сервера и может обновляться «на лету».
-
Использование:
spring-cloud-config-server(поднимаем сервер конфигурации),spring-cloud-starter-config(клиенты).
-
Регистрация и обнаружение сервисов.
-
Поддерживаются:
- Netflix Eureka (
spring-cloud-starter-netflix-eureka-server), - Consul, Zookeeper, Kubernetes Service Discovery.
- Netflix Eureka (
-
Клиенты регистрируются на сервере и находят друг друга по имени.
Пример:
@EnableEurekaClient
@SpringBootApplication
public class UserServiceApp {}- Ранее использовался Ribbon (Netflix), сейчас Spring Cloud LoadBalancer.
- Автоматически распределяет запросы между инстансами сервиса.
- Пример:
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}Теперь вызов http://user-service/users распределяется по всем инстансам user-service.
- Spring Cloud Gateway — современный API-шлюз (замена Zuul).
- Задачи: маршрутизация, фильтры (аутентификация, логирование, метрики, CORS).
Пример конфигурации (YAML):
spring:
cloud:
gateway:
routes:
- id: user_route
uri: lb://user-service
predicates:
- Path=/users/**
filters:
- AddRequestHeader=X-Request-Source, gateway-
Для отказоустойчивости.
-
Netflix Hystrix (deprecated), сейчас используют Resilience4j (
spring-cloud-starter-circuitbreaker-resilience4j). -
Позволяет:
- ограничить время ожидания (timeout),
- fallback при сбое,
- bulkhead (изоляция потоков),
- retry.
Пример:
@CircuitBreaker(name = "userService", fallbackMethod = "fallback")
public String getUser() {
return restTemplate.getForObject("http://user-service/users/1", String.class);
}- Унифицированная абстракция для сообщений (Kafka, RabbitMQ, Pulsar).
- Пишем код на уровне биндингов → под капотом драйвер очереди.
Пример:
@EnableBinding(Sink.class)
public class MessageConsumer {
@StreamListener(Sink.INPUT)
public void handle(String message) {
System.out.println("Received: " + message);
}
}(в новых версиях — через функциональный стиль Supplier/Consumer).
- Добавляет traceId и spanId во все запросы/логи.
- Поддерживает Zipkin/Jaeger/Brave.
- Автоматически встраивает ID в HTTP-заголовки (
X-B3-TraceId,X-B3-SpanId).
- Распространяет события через брокеры сообщений (Kafka, RabbitMQ).
- Пример: обновление конфигурации (refresh) на всех сервисах через шину.
-
Подключить стартер:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
Аннотации и конфигурация:
@EnableEurekaServer,@EnableEurekaClient,@EnableConfigServer.
-
YAML настройки:
- указываем discovery server, config server, gateway правила.
-
Интеграция с Kubernetes:
- вместо Eureka можно использовать
spring-cloud-starter-kubernetes.
- вместо Eureka можно использовать
-
Spring Cloud — набор инструментов для микросервисов.
-
Основные модули:
- Config — централизованная конфигурация,
- Eureka/Consul/Zookeeper — service discovery,
- LoadBalancer — балансировка вызовов между сервисами,
- Gateway — API-шлюз, маршрутизация и фильтры,
- Circuit Breaker (Resilience4j) — отказоустойчивость,
- Stream — унифицированный доступ к брокерам сообщений,
- Sleuth — распределённый трейсинг,
- Bus — события и refresh конфигурации.
-
Большинство компонентов Spring Cloud — это обёртки над популярными решениями (Netflix OSS, Consul, Kubernetes, Kafka и др.) с единым API в стиле Spring Boot.