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

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

Модуль 5. Spring
Рівень 24 , Лекція 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! У реальних проєктах це дозволить автоматично реєструвати і виявляти мікросервіси, звільняючи вас від ручного керування їхніми адресами і портами. Це великий крок на шляху до професійної мікросервісної архітектури.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ