JavaRush /Курсы /Модуль 5. Spring /Лекция 279: Интеграция всех компонентов системы в одну ар...

Лекция 279: Интеграция всех компонентов системы в одну архитектуру

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

Сегодня мы интегрируем наши микросервисы с остальными компонентами системы, протестируем взаимодействие и подготовимся к большому финалу. Let's make it happen!


Объединение компонентов: как собрать архитектурный лего-набор

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

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


Зависимости

Наша система состоит из следующих компонентов:

  1. Микросервисы: каждый микросервис выполняет свою роль, например, управление пользователями, обработка заказов.
  2. Kafka: используется для событийной коммуникации между микросервисами.
  3. Eureka: сервис-реестр. При старте микросервисы регистрируются в нем, чтобы другие могли их обнаружить.
  4. API Gateway: центральный маршрутизатор для входящих запросов.
  5. Мониторинг и логирование: Prometheus, Grafana, ELK.

Интеграция Eureka: регистрация всех сервисов

Мы начнем с Eureka, ведь это сердце нашего сервис-реестра. Все микросервисы должны регистрироваться в нем, а API Gateway — находить их.

Регистрация микросервисов в Eureka

Пример кода для одного из микросервисов (application.properties):


spring.application.name=user-service
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

И, конечно, не забываем добавить зависимость в pom.xml:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

Проверка: поднимите Eureka (если еще не подняли) и убедитесь, что ваш микросервис появился в списке зарегистрированных сервисов. Открываем браузер на http://localhost:8761, и там должен быть ваш user-service. Условно, это как видеть своё имя в списке участников конференции. Приятно, правда?

Интеграция API Gateway с Eureka

API Gateway должен уметь перенаправлять запросы к зарегистрированным сервисам. Это настраивается так:


spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
    netflix:
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:8761/eureka/

Теперь вы можете направлять запросы через Gateway, пользуясь именами микросервисов. Например, запрос http://localhost:8080/user-service/users будет автоматически перенаправлен в user-service.


Связываем Kafka и микросервисы

Чтобы микросервисы могли обмениваться событиями через Kafka, следуем следующим шагам:

1. Подключение продюсеров

На стороне вашего продюсера необходимо настроить отправку сообщений. Например, наш order-service будет информировать другие микросервисы о новых заказах:

2. Настройка консьюмеров

На стороне других микросервисов (например, payment-service) мы принимаем события:


@KafkaListener(topics = "order-events", groupId = "payment-service")
public void listen(String message) {
    System.out.println("Получено сообщение: " + message);
    // Обработка логики
}

Важный момент: Настройте сериализацию/десериализацию сообщений. Используйте JSON, если хотите сохранить дружелюбие сообщений для чтения.


Проверяем маршруты в API Gateway

После того как Kafka настроена, а Eureka знает о наших сервисах, проверим маршрутизацию. Это один из самых ответственных этапов!

Настройте маршрут в API Gateway:


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

Теперь запрос http://localhost:8080/users/1 перенаправляется в user-service.


Подключаем мониторинг и логирование

Мониторинг — это как ваша система "глаз" в продакшене. Уже настроили базовые сборщики метрик? Теперь важно убедиться, что Prometheus и Grafana видят ваши микросервисы.

Очередной шаг к наблюдаемости — добавление метрик через Actuator. Не забудьте подключить зависимости:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Убедитесь, что метрики доступны на /actuator и экспортируются в Prometheus. Настройте application.properties:


management.endpoints.web.exposure.include=*
management.metrics.export.prometheus.enabled=true
management.metrics.export.prometheus.endpoint=/prometheus

Интеграция с ELK

Ещё важный шаг — централизованное логирование. Установите Logstash и отправляйте логи ваших микросервисов в Elasticsearch:


logging:
  file:
    name: /var/log/microservices.log

Финальная проверка

После подключения всех компонентов проведите интеграционное тестирование. Коммуникация должна работать следующим образом:

  1. Пользователь отправляет HTTP-запрос через API Gateway.
  2. API Gateway перенаправляет запрос в нужный микросервис.
  3. Микросервис обрабатывает запрос, взаимодействуя с Kafka (если это событие).
  4. Другие микросервисы реагируют на события из Kafka.

Для тестирования можно использовать Postman или автоматизировать это с помощью тестов на MockMvc.


Распространённые проблемы

  1. Сервисы "не видят" друг друга. Проверьте настройки Eureka и убедитесь, что все сервисы зарегистрированы.
  2. Kafka сообщения не доставляются. Проверьте настройки брокера и убедитесь, что топик существует.
  3. Проблемы с маршрутизацией API Gateway. Убедитесь, что путь в маршруте правильно настроен.

Готово! Ваш архитектурный лего-набор собран. Теперь система объединена в одну архитектуру. Браво!

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