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! У реальних проєктах це дозволить автоматично реєструвати і виявляти мікросервіси, звільняючи вас від ручного керування їхніми адресами і портами. Це великий крок на шляху до професійної мікросервісної архітектури.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ