🧩 Микросервисы: Укрощение хаоса (Spring Cloud)
Когда у вас один сервис, всё просто. Но когда их становится 10, 20 или 50, возникают вопросы:
1. Как сервису А узнать IP-адрес сервиса Б? (А если он меняется динамически?)
2. Как не писать тонны кода для HTTP-запросов?
3. Как клиенту (фронтенду) обращаться ко всей этой куче сервисов?
Для этого есть три главных инструмента.
1️⃣ Eureka: Телефонная книга (Service Discovery)
В облаке сервисы постоянно перезапускаются, меняют IP-адреса и порты. Хардкодить
Eureka Server - это реестр.
🔴 Когда сервис (например,
🔴 Когда
В коде:
Вам нужно просто добавить аннотацию
2️⃣ OpenFeign: Магия общения
Окей, адрес мы нашли. Теперь нужно отправить запрос.
Раньше мы использовали
Feign позволяет вызывать удаленный REST-сервис так, будто это обычный метод интерфейса в вашем коде.
Было (
Стало (
Вы просто пишете интерфейс, а реализацию Spring сгенерирует сам!
Это называется Декларативный REST-клиент. Чисто, красиво, типизировано.
3️⃣ API Gateway: Единая точка входа
Представьте, что у вас 50 микросервисов. Фронтенд не должен знать адреса каждого из них (
Spring Cloud Gateway - это вахтер на входе.
Весь внешний мир стучится только в него (например, на порт 8080), а он уже сам разруливает, куда отправить запрос.
Что он делает:
1. Маршрутизация:
2. Безопасность: Проверяет JWT токен один раз на входе.
3. Rate Limiting: "Не больше 10 запросов в секунду от этого юзера".
Пример конфига (
⚡ Итог: Как это работает вместе?
1. Сервисы просыпаются и регистрируются в Eureka.
2. Фронтенд шлет запрос на Gateway.
3. Gateway спрашивает у Eureka адрес нужного сервиса и пересылает запрос.
4. Если сервисам нужно пообщаться между собой, они используют Feign.
#Java #Microservices #SpringCloud #Eureka #Feign
📲 Мы в MAX
👉@BookJava
Когда у вас один сервис, всё просто. Но когда их становится 10, 20 или 50, возникают вопросы:
1. Как сервису А узнать IP-адрес сервиса Б? (А если он меняется динамически?)
2. Как не писать тонны кода для HTTP-запросов?
3. Как клиенту (фронтенду) обращаться ко всей этой куче сервисов?
Для этого есть три главных инструмента.
1️⃣ Eureka: Телефонная книга (Service Discovery)
В облаке сервисы постоянно перезапускаются, меняют IP-адреса и порты. Хардкодить
https://localhost:8081 в коде - самоубийство.Eureka Server - это реестр.
OrderService) запускается, он звонит в Eureka: "Привет, я OrderService, мой IP такой-то".UserService хочет найти заказы, он спрашивает Eureka: "Где сейчас живет OrderService?".В коде:
Вам нужно просто добавить аннотацию
@EnableDiscoveryClient, и магия произойдет сама. Сервисы будут находить друг друга по имени, а не по IP.2️⃣ OpenFeign: Магия общения
Окей, адрес мы нашли. Теперь нужно отправить запрос.
Раньше мы использовали
RestTemplate - это было громоздко и некрасиво.Feign позволяет вызывать удаленный REST-сервис так, будто это обычный метод интерфейса в вашем коде.
Было (
RestTemplate):
String url = "https://order-service/orders/" + userId;
List<Order> orders = restTemplate.getForObject(url, List.class); // Фу, нетипизированно
Стало (
FeignClient):Вы просто пишете интерфейс, а реализацию Spring сгенерирует сам!
@FeignClient(name = "order-service") // Имя сервиса в Eureka
public interface OrderClient {
@GetMapping("/orders/{userId}")
List<Order> getUserOrders(@PathVariable Long userId);
}
// Использование в сервисе:
// List<Order> orders = orderClient.getUserOrders(123L);
Это называется Декларативный REST-клиент. Чисто, красиво, типизировано.
3️⃣ API Gateway: Единая точка входа
Представьте, что у вас 50 микросервисов. Фронтенд не должен знать адреса каждого из них (
api.com:8081, api.com:8082...). Это небезопасно и сложно (CORS error, привет 👋).Spring Cloud Gateway - это вахтер на входе.
Весь внешний мир стучится только в него (например, на порт 8080), а он уже сам разруливает, куда отправить запрос.
Что он делает:
1. Маршрутизация:
/users/** -> лети в UserService, /orders/** -> лети в OrderService.2. Безопасность: Проверяет JWT токен один раз на входе.
3. Rate Limiting: "Не больше 10 запросов в секунду от этого юзера".
Пример конфига (
application.yaml):
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://USER-SERVICE # lb = Load Balancer (через Eureka)
predicates:
- Path=/users/**
⚡ Итог: Как это работает вместе?
1. Сервисы просыпаются и регистрируются в Eureka.
2. Фронтенд шлет запрос на Gateway.
3. Gateway спрашивает у Eureka адрес нужного сервиса и пересылает запрос.
4. Если сервисам нужно пообщаться между собой, они используют Feign.
#Java #Microservices #SpringCloud #Eureka #Feign
📲 Мы в MAX
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝6👍4