Eureka — это "телефонная книга" для ваших микросервисов. Вместо того чтобы вручную прописывать IP-адреса и порты сервисов, вы можете позволить им регистрироваться в едином реестре, где они будут доступны для других клиентов или API Gateway в нужный момент. Это значительно упрощает поддержку и масштабирование микросервисной системы. Представьте, что у вас 10 микросервисов, и их адреса меняются каждый раз при развертывании. С Eureka вам не нужно заучивать эти адреса — всё будет автоматически обновляться.
Что сегодня сделаем?
- Установим и настроим Eureka Server, который будет выступать в роли реестра сервисов.
- Подключим микросервис в роли Eureka Client, чтобы он регистрировался на сервере.
- Проверим всё это на практике, используя консоль Eureka Dashboard.
- Решим возможные проблемы с регистрацией и взаимодействием.
Шаг 1: Настройка Eureka Server
Чтобы начать, необходимо создать новый Spring Boot проект, который будет выполнять роль Eureka Server.
1.1 Создаём проект
- Используем Spring Initializr:
- Указываем зависимости:
- Spring Boot Starter Web
- Spring Boot Starter Actuator
- Eureka Server
- Указываем зависимости:
1.2 Конфигурация pom.xml
Если вы используете Maven, проверьте, что зависимости добавлены правильно:
<dependencies>
<!-- Eureka Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Actuator for Monitoring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
Не забудьте указать версию Spring Cloud в application.properties или в разделе <dependencyManagement>:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.3 Настраиваем application.yml
Создаём файл src/main/resources/application.yml:
server:
port: 8761 # Стандартный порт для Eureka Server
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false # Сам сервер не будет регистрироваться в других серверах
fetch-registry: false # Не пытаемся скачать реестр
server:
enable-self-preservation: false # Отключаем режим самосохранения для простоты
1.4 Включение Eureka Server
Добавьте аннотацию @EnableEurekaServer в главный класс приложения:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Запускаем приложение. Ваш Eureka Server теперь доступен по адресу: http://localhost:8761.
Шаг 2: Настройка Eureka Client
Теперь создадим микросервис, который будет регистрироваться в Eureka Server.
2.1 Создаём новый проект
Используем Spring Initializr:
- Dependencies:
- Spring Boot Starter Web
- Spring Boot Starter Actuator
- Eureka Client
2.2 Конфигурация pom.xml
Добавляем необходимые зависимости:
<dependencies>
<!-- Eureka Client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Actuator for Monitoring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
2.3 Конфигурируем application.yml
Создаём файл src/main/resources/application.yml:
server:
port: 8081 # Указываем порт микросервиса
spring:
application:
name: service-client # Имя микросервиса
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # URL сервера Eureka
2.4 Подключение Eureka Client
В главном классе добавьте аннотацию @EnableEurekaClient:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ServiceClientApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceClientApplication.class, args);
}
}
Шаг 3: Проверка взаимодействия
- Запустите оба приложения: Eureka Server и Service Client.
- Откройте Eureka Dashboard:
http://localhost:8761. - Вы должны увидеть микросервис с именем
service-client, зарегистрированный в реестре. Он будет показан в разделе Instances currently registered with Eureka.
Шаг 4: Типичные ошибки и их устранение
Если клиент не отображается в Eureka Dashboard, проверьте следующее:
- Неправильный URL сервера Eureka:
- Убедитесь, что указанный в
application.ymlURL корректен и сервер запущен.
- Убедитесь, что указанный в
- Несовместимая версия Spring Cloud:
- Убедитесь, что версии Spring Cloud и Spring Boot совместимы. Например, Spring Boot 3.x совместим с Spring Cloud 2022.x.
- Проблемы с CORS:
- Если микросервис использует запросы между доменами, настройте политику CORS.
Теперь у вас есть рабочая настройка Eureka Server и Eureka Client! В реальных проектах это позволит автоматически регистрировать и обнаруживать микросервисы, избавляя вас от ручного управления их адресами и портами. Это большой шаг на пути к профессиональной микросервисной архитектуре.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ