JavaRush /Курсы /Модуль 5. Spring /Лекция 273: Подготовка инфраструктуры: Kafka, Eureka, API...

Лекция 273: Подготовка инфраструктуры: Kafka, Eureka, API Gateway

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

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


Что нас ждет сегодня?

  1. Настройка Kafka для обработки событий.
  2. Установка и настройка Eureka для Service Discovery.
  3. Подготовка API Gateway для маршрутизации и управления запросами.

1. Настройка Kafka

Kafka — это мощный инструмент для асинхронной коммуникации между микросервисами. Благодаря Kafka можно передавать данные на миллионы сообщений в секунду, обеспечивая при этом гарантии доставки. Это особенно полезно в сценариях, где нужно обрабатывать события в реальном времени, например, запись заказов, отслеживание уведомлений и т.д.

Подготовка Kafka на локальной машине

Мы используем Apache Kafka в локальной среде, чтобы протестировать взаимодействие между микросервисами. Для этого можно воспользоваться Docker. Если у вас еще не установлен Docker, установите его согласно официальной документации Docker.

Docker Compose для Kafka

Создайте файл docker-compose.yml — он поможет запустить Kafka и Zookeeper (так как Kafka требует Zookeeper для координации).


version: '3'
services:
  zookeeper:
    image: 'confluentinc/cp-zookeeper:latest'
    container_name: zookeeper
    ports:
      - '2181:2181'
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181

  kafka:
    image: 'confluentinc/cp-kafka:latest'
    container_name: kafka
    ports:
      - '9092:9092'
    environment:
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://localhost:9092'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

Запустите Kafka и Zookeeper:

docker-compose up -d

Теперь Kafka доступна на localhost:9092. Можно двигаться дальше!


2. Установка и настройка Eureka

Eureka — это сервис-реестр от Netflix OSS, который используется для обнаружения сервисов в микросервисной архитектуре. Когда приложение регистрируется в Eureka, его можно легко найти и вызывать другие сервисы, не беспокоясь о том, где они развернуты.

Создадим отдельный сервис для Eureka. Добавьте новый модуль в ваш проект (можно назвать его eureka-server).

Сначала добавим зависимости в файл pom.xml (если вы используете Maven):


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    <version>3.1.6</version>
</dependency>

Если вы используете Gradle:


implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:3.1.6'

Добавьте в класс с аннотацией @SpringBootApplication аннотацию @EnableEurekaServer:


@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

Для настройки Eureka добавьте минимальную конфигурацию:


server:
  port: 8761  # Порт, на котором будет работать Eureka Server

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

Запуск Eureka

Запустите этот сервис и перейдите по адресу http://localhost:8761. Вы должны увидеть веб-интерфейс Eureka, но список сервисов пока будет пустым. Это нормально — мы ещё не зарегистрировали никаких микросервисов.


3. Настройка API Gateway

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

Для реализации Gateway мы будем использовать Spring Cloud Gateway — это легковесный и мощный инструмент на основе Spring Boot.

Настройка API Gateway

Создайте ещё один микросервис (назовём его api-gateway).

Добавьте нужные зависимости в файл pom.xml:


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

Включите регистрацию в Eureka и настройте маршруты в application.yml:


server:
  port: 8080  # Порт Gateway

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  cloud:
    gateway:
      routes:
        - id: example-service
          uri: lb://example-service  # lb означает Load Balancer
          predicates:
            - Path=/example/**

Почему это важно

Когда ваши микросервисы регистрируются в Eureka, Gateway получает их адреса автоматически. Это упрощает маршрутизацию и позволяет добавлять новые сервисы без изменений в Gateway.


Как проверить интеграцию?

  1. Запустите все три компонента: Kafka, Eureka и API Gateway.
  2. Настройте один или два простых микросервиса, которые зарегистрируются в Eureka.
  3. Отправьте HTTP-запрос через Gateway, чтобы проверить маршрутизацию.

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

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