JavaRush /Курсы /Модуль 5. Spring /Лекция 248: Интеграция Eureka с API Gateway

Лекция 248: Интеграция Eureka с API Gateway

Модуль 5. Spring
25 уровень , 7 лекция
Открыта

Когда мы работаем в микросервисной архитектуре, у нас может быть десятки или сотни сервисов, каждый из которых отвечает за свою часть логики. Статическая конфигурация этих сервисов в API Gateway — это как попытка вручную выстроить очередь из кошек: никто не гарантирует, что завтра сервис не сменит адрес или не появится новый.

Интеграция API Gateway с Eureka позволяет:

  1. Автоматически обнаруживать микросервисы: Eureka берёт на себя задачу регистрации сервисов и их мониторинга. API Gateway будет запрашивать эту информацию в реальном времени.
  2. Динамически маршрутизировать запросы: новые сервисы или изменения в существующих автоматически учитываются в маршрутах.
  3. Упростить управление микросервисами: менее рутинной работы вручную — больше автоматизации.

Подготовка к интеграции

Перед началом интеграции убедитесь, что у вас есть:

  • Развёрнутый Eureka Server (он был настроен в предыдущей лекции "Практика: настройка Eureka для обнаружения микросервисов").
  • Один или несколько клиентских микросервисов, зарегистрированных в Eureka (например, сервисы user-service и order-service).

Теперь создадим проект для API Gateway и свяжем его с Eureka Server.


1. Создание проекта для API Gateway

1. Инициализация проекта Используем Spring Initializr для создания нового Spring Boot приложения:

  • Dependencies:
    • Spring Cloud Gateway
    • Eureka Discovery Client
    • Spring Boot Actuator (для мониторинга, это опционально, но полезно)

Скачиваем проект и открываем его в любимой среде разработки (например, IntelliJ IDEA).

2. Настройка application.yml

Добавим базовую конфигурацию в наш application.yml для подключения к Eureka Server:


server:
  port: 8080 # Порт API Gateway

spring:
  application:
    name: api-gateway # Имя сервиса в Eureka
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # Включаем интеграцию с Eureka
      routes:
        - id: default_route
          uri: lb://placeholder # Это временная заглушка до автоматической маршрутизации.

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/ # Ссылка на ваш Eureka Server
    fetch-registry: true
    register-with-eureka: true

Обратите внимание на ключевую часть этой конфигурации:

  • spring.cloud.gateway.discovery.locator.enabled: true — активирует интеграцию Gateway с Eureka.
  • lb:// — это указание Spring использовать Ribbon (Load Balancer) для маршрутизации запросов.

3. Реализация автоматической маршрутизации

Теперь, благодаря включению discovery.locator.enabled, API Gateway автоматически будет считывать информацию о зарегистрированных сервисах из Eureka. Каждый сервис в Eureka становится доступным "по имени". Например:

  • lb://user-service будет направлять запросы к сервису user-service.
  • lb://order-service — к order-service.

Но чтобы проверить это на практике, давайте добавим один маршрут вручную для тестирования:


spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/users/**
        - id: order-service
          uri: lb://order-service
          predicates:
            - Path=/orders/**

Эти маршруты говорят Gateway направлять:

  • Все запросы, начинающиеся с /users/, к сервису user-service.
  • Все запросы, начинающиеся с /orders/, к сервису order-service.

4. Запуск API Gateway и тестирование

Запускаем наш API Gateway и тестируем маршруты. Убедитесь, что ваши сервисы user-service и order-service зарегистрировались в Eureka Server и работают.

Тестирование с помощью *Postman или curl*

  • Запрос:
    curl -X GET http://localhost:8080/users/all
    
    Ожидаемый результат: запрос будет перенаправлен на user-service и вы получите список всех пользователей (или ошибку, если сервис настроен неверно).
  • Запрос:
    curl -X GET http://localhost:8080/orders
    
    Ожидаемый результат: запрос будет перенаправлен на order-service.

Если всё работает, значит интеграция прошла успешно!

5. Отладка и мониторинг

Для отладки интеграции вы можете использовать Spring Boot Actuator. Добавьте в application.yml следующую конфигурацию:


management:
  endpoints:
    web:
      exposure:
        include: "*"

Теперь вы можете проверить /actuator/gateway/routes для вывода списка всех маршрутов в API Gateway, которые обнаружены через Eureka.

Пример команды для проверки:

curl http://localhost:8080/actuator/gateway/routes

6. Расширенная конфигурация

Вы также можете настроить фильтры для обработки запросов. Например, если нужно добавить заголовок ко всем запросам:


spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/users/**
          filters:
            - AddRequestHeader=X-Service, UserService

Теперь любой запрос к user-service будет автоматически содержать заголовок X-Service: UserService.

Чтобы защитить сервисы от перегрузки, можно настроить ограничение скорости запросов (rate-limiting):


spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/users/**
          filters:
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 10 # Запросов в секунду
                redis-rate-limiter.burstCapacity: 20

Частые проблемы и их решения

  1. Eureka Server недоступен: если API Gateway не может подключиться к Eureka, убедитесь, что Eureka Server запущен, и его адрес указан корректно в application.yml.
  2. Микросервис не регистрируется: убедитесь, что в application.yml ваших микросервисов настроена корректная регистрация в Eureka.
  3. Ошибки маршрутизации: проверьте конфигурацию маршрутов в /actuator/gateway/routes и убедитесь, что указан корректный uri.

Поздравляю! Теперь ваш API Gateway стал умным, благодаря интеграции с Eureka. Вы не только упростили маршрутизацию запросов, но и сделали систему гибкой к изменениям в микросервисах. Мы продолжим развивать ваши навыки в следующих лекциях, до встречи!

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ