JavaRush /Курсы /Модуль 5. Spring /Лекция 247: Практика: настройка Eureka для обнаружения ми...

Лекция 247: Практика: настройка Eureka для обнаружения микросервисов

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

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


Что сегодня сделаем?

  1. Установим и настроим Eureka Server, который будет выступать в роли реестра сервисов.
  2. Подключим микросервис в роли Eureka Client, чтобы он регистрировался на сервере.
  3. Проверим всё это на практике, используя консоль Eureka Dashboard.
  4. Решим возможные проблемы с регистрацией и взаимодействием.

Шаг 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: Проверка взаимодействия

  1. Запустите оба приложения: Eureka Server и Service Client.
  2. Откройте Eureka Dashboard: http://localhost:8761.
  3. Вы должны увидеть микросервис с именем service-client, зарегистрированный в реестре. Он будет показан в разделе Instances currently registered with Eureka.

Шаг 4: Типичные ошибки и их устранение

Если клиент не отображается в Eureka Dashboard, проверьте следующее:

  1. Неправильный URL сервера Eureka:
    • Убедитесь, что указанный в application.yml URL корректен и сервер запущен.
  2. Несовместимая версия Spring Cloud:
    • Убедитесь, что версии Spring Cloud и Spring Boot совместимы. Например, Spring Boot 3.x совместим с Spring Cloud 2022.x.
  3. Проблемы с CORS:
    • Если микросервис использует запросы между доменами, настройте политику CORS.

Теперь у вас есть рабочая настройка Eureka Server и Eureka Client! В реальных проектах это позволит автоматически регистрировать и обнаруживать микросервисы, избавляя вас от ручного управления их адресами и портами. Это большой шаг на пути к профессиональной микросервисной архитектуре.

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