Сегодня настало время переходить к практике: мы начнем настраивать инфраструктуру нашего микросервисного приложения. На этом этапе мы будем интегрировать три ключевых элемента: Kafka для асинхронной коммуникации, Eureka для обнаружения сервисов и API Gateway для маршрутизации запросов.
Что нас ждет сегодня?
- Настройка Kafka для обработки событий.
- Установка и настройка Eureka для Service Discovery.
- Подготовка 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.
Как проверить интеграцию?
- Запустите все три компонента: Kafka, Eureka и API Gateway.
- Настройте один или два простых микросервиса, которые зарегистрируются в Eureka.
- Отправьте HTTP-запрос через Gateway, чтобы проверить маршрутизацию.
Теперь вы подготовили базовую инфраструктуру для своего микросервисного приложения: Kafka для событий, Eureka для обнаружения сервисов и API Gateway для маршрутизации. В дальнейших лекциях мы будем расширять функционал микросервисов и интегрировать их между собой.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ