Перейти к основному содержимому

Spring Cloud — отключить клиентов обнаружения с профилями

· 4 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим, как отключить клиенты обнаружения Spring Cloud с помощью профилей. Это может быть полезно в ситуациях, когда мы хотим включить/отключить обнаружение службы без внесения каких-либо изменений в код.

2. Настройте сервер Eureka и клиент Eureka.

Начнем с создания сервера Eureka и клиента обнаружения.

Во-первых, мы можем настроить наш сервер Eureka, используя раздел 2 учебника Spring Cloud Netflix Eureka .

2.1. Настройка клиента обнаружения

Следующая часть — создать еще одно приложение, которое будет регистрироваться на сервере. Давайте настроим это приложение как клиент обнаружения.

Давайте добавим стартовые зависимости Web и Eureka Client в наш pom.xml :

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

Нам также нужно убедиться, что наш облачный стартер присутствует в разделе управления зависимостями и что установлена версия Spring Cloud.

При создании проекта с использованием Spring Initializr они уже будут установлены. Если нет, мы можем добавить их в наш файл pom.xml :

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>${spring-cloud-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<properties>
<spring-cloud-dependencies.version>2021.0.1</spring-cloud-dependencies.version>
</properties>

2.2. Добавление свойств конфигурации

Когда у нас есть зависимости, все, что нам нужно сделать, это добавить свойства конфигурации нашего нового клиентского приложения в файл application.properties :

eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:8761/eureka}
eureka.instance.preferIpAddress=false
spring.application.name=spring-cloud-eureka-client

Это гарантирует, что при запуске приложения оно зарегистрируется на сервере Eureka, который находится по указанному выше URL-адресу. Он будет называться spring-cloud-eureka-client.

Следует отметить, что обычно мы также используем аннотацию @EnableDiscoveryClient в классе конфигурации для включения клиентов обнаружения. Однако нам не нужна аннотация, если мы используем стартеры Spring Cloud. Клиент обнаружения включен по умолчанию. Кроме того, когда он находит клиент Netflix Eureka в пути к классам, он автоматически настраивает его.

2.3. Привет, мировой контроллер

Чтобы протестировать наше приложение, нам понадобится образец URL-адреса, по которому мы можем попасть. Давайте создадим простой контроллер, который будет возвращать приветственное сообщение:

@RestController
public class HelloWorldController {

@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
}

Теперь пришло время запустить Eureka Server и Discovery Client. Когда мы запускаем приложение, клиент обнаружения зарегистрируется на сервере Eureka. Мы можем видеть то же самое на панели инструментов Eureka Server:

./9b4593c0b7c081563969d96ca349b13e.png

3. Конфигурация на основе профиля

Могут быть ситуации, когда мы можем захотеть отключить регистрацию службы. Одной из причин может быть окружающая среда.

Например, мы можем захотеть отключить клиентов обнаружения в локальных средах разработки, потому что запуск сервера Eureka каждый раз, когда мы хотим протестировать локально, может быть ненужным. Давайте посмотрим, как мы можем этого добиться.

Мы изменим свойства в файле application.properties , чтобы включать и отключать клиентов обнаружения для каждого профиля.

3.1. Использование отдельных файлов свойств

Одним из простых и популярных способов является использование отдельных файлов свойств для каждой среды .

Итак, давайте создадим еще один файл свойств с именем application-dev.properties :

spring.cloud.discovery.enabled=false

Мы можем включать/отключать клиентов обнаружения, используя свойство spring.cloud.discovery.enabled . Мы установили значение false , чтобы отключить клиентов обнаружения.

Когда профиль разработчика активен, этот файл будет использоваться вместо исходного файла свойств.

3.2. Использование файлов с несколькими документами

Если мы не хотим использовать отдельные файлы для каждой среды, другим вариантом является использование файлов свойств нескольких документов .

Для этого мы добавим два свойства:

#---
spring.config.activate.on-profile=dev
spring.cloud.discovery.enabled=false

Для этого метода мы используем '#-', чтобы разделить наш файл свойств на две части. Далее мы будем использовать свойство spring.config.activate.on-profile . Эти две строки, используемые вместе, указывают приложению читать свойства, определенные в текущей части, только если профиль активен . В нашем случае мы будем использовать профиль dev .

Точно так же, как и раньше, мы установили для свойства spring.cloud.discovery.enabled значение false .

Это отключит Discovery Clients в профиле dev , но оставит их включенными, когда профиль не активен.

4. Тестирование

Теперь пришло время запустить сервер Eureka и клиент обнаружения и проверить, все ли работает должным образом. Мы еще не добавили профиль. Когда мы запускаем приложение, клиент обнаружения зарегистрируется на сервере Eureka. Мы можем видеть то же самое на панели инструментов Eureka Server:

./9b4593c0b7c081563969d96ca349b13e.png

4.1. Тестирование с профилем

Далее мы добавим профиль во время работы приложения. Мы можем добавить аргумент командной строки -Dspring.profiles.active=dev , чтобы включить профиль dev . Когда мы запускаем приложение, мы видим, что на этот раз клиент не регистрируется на сервере Eureka:

./2b2ebf1dbb93e7126286086c206980ee.png

5. Вывод

В этом руководстве мы узнали, как использовать свойства для добавления конфигураций на основе профилей. Мы использовали тот же метод для отключения клиентов обнаружения на основе активных профилей.

Как всегда, код для этого руководства доступен на GitHub .