Эта статья основана на версии Spring Cloud Finchley.RELEASE.
Обнаружение службы: клиенты Eureka
Обнаружение службы — ключевой принцип микросервисной архитектуры. Ручная настройка каждого клиента не только сложна, но и чревата ошибками. Netflix предоставляет Erueka в качестве сервера и клиента для обнаружения служб. Сторона сервера настраивается, и каждый сервер может регистрироваться друг с другом для развертывания высокой доступности.
Как использовать клиент Эврика
установить идентификатор группы какorg.springframework.cloud
, идентификатор артефактаspring-cloud-starter-netflix-eureka-client
Eureka Client можно ввести, добавив зависимости в проект. Конкретный номер версии см.Spring Cloud Project
Зарегистрировать клиент Эврика
Когда клиент регистрируется в Eureka, он предоставляет ряд метаданных, таких как: хост, порт, URL проверки работоспособности, домашняя страница и т. д. Eureka принимает информацию о пульсе, отправленную каждой службой. Если информация о пульсе не будет получена в течение настроенного периода ожидания, экземпляр будет удален из списка регистрации. Например, следующие услуги:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
когда положитьspring-cloud-starter-netflix-eureka-client
При добавлении в путь к классам приложение будет автоматически зарегистрировано на сервере Eureka, нужно только настроить расположение сервера Eureka.
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
в состоянии пройти${spring.application.name}
,${server.port}
Настройте зарегистрированное имя службы и порт службы. будетspring-cloud-starter-netflix-eureka-client
Добавление в classpath сделает сервис зарегистрированным как экземпляр Eureka, то есть сам сервис будет зарегистрирован сам с собой, а также будет клиентом, который получает другие сервисы из реестра. Если вы хотите отключить самозарегистрированные службы, вы можете установитьeureka.client.enabled=false
.
Для получения дополнительной информации о конфигурации см.EurekaInstanceConfigBeanа такжеEurekaClientConfigBean.
Авторизован через Eureka Server
Если Eureka Server настроен с базовой информацией авторизации http, вы можете добавить информацию авторизации вeureka.client.serviceUrl.defaultZone
установить информацию для авторизации вeureka.client.serviceUrl.defaultZone=http://user:password@localhost:8761/eureka
.
Страница состояния и проверка работоспособности
Страница состояния по умолчанию и интерфейс проверки работоспособности экземпляров Eureka:/info
а также/health
, они являются конечными точками по умолчанию для Spring Boot Actuator. Если вы не хотите использовать настройки по умолчанию, вы можете изменить путь сервлета (server.servletPath=/custom) или путь управления (management.contextPath=/admin) и настроить его в yaml
eureka:
instance:
statusPageUrlPath: ${management.server.servlet.context-path}/info
healthCheckUrlPath: ${management.server.servlet.context-path}/health
Зарегистрируйтесь в безопасном приложении
Если приложению необходимо обмениваться данными через HTTPS, вы можете установить:
- eureka.instance.nonSecurePortEnabled=false
- eureka.instance.securePortEnabled=true
Установив эти две конфигурации, Eureka может опубликовать безопасную связь,DiscoveryClient
будет возвращаться каждый разhttps
URI для начала. Аналогичным образом, если служба настроена таким образом, проверка работоспособности также будет использовать https. Поскольку Eureka работает в интрасети, она по-прежнему публикует конечные точки проверки работоспособности и состояния без HTTPS, поэтому ее необходимо заменить вручную, например:
eureka:
instance:
statusPageUrl: https://${eureka.hostname}/info
healthCheckUrl: https://${eureka.hostname}/health
homePageUrl: https://${eureka.hostname}/
медицинское обследование
По умолчанию Eureka использует пульсацию, чтобы определить, доступна ли услуга. Клиенты обнаружения служб не выполняют проверки работоспособности Spring Boot Actuator, если не указано иное. После успешной регистрации сервиса Eureka всегда помечает приложение как UP. Его можно изменить с помощью следующей конфигурации:
eureka:
client:
healthcheck:
enabled: true
Обратите внимание, что эту конфигурацию можно настроить только в application.yml.Если она настроена в bootstrap.yml, могут быть побочные эффекты, такие как регистрация служб как UNKNOWN.
Метаданные Эврика
Стандартная информация метаданных включает в себя хост, порт, IP-адрес, страницу состояния, проверку работоспособности. Если вам нужна информация о пользовательских метаданных, вы можете настроить ее так, чтобыeureka.instance.metadataMap
, эта информация метаданных может быть получена его службой
Изменить идентификатор экземпляра Eureka
Spring Cloud Eureka будет выглядеть следующим образом${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}}
Идентификатор зарегистрированного экземпляра микро-Эврики. Напримерmyhost:myappname:8080
. Его идентификатор экземпляра можно изменить с помощью следующей конфигурации.
eureka:
instance:
instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
Использование клиента Эврика
Информацию об обнаружении службы можно получить через EurekaClient, например:
@Autowired
private EurekaClient discoveryClient;
public String serviceUrl() {
InstanceInfo instance = discoveryClient.getNextServerFromEureka("STORES", false);
return instance.getHomePageUrl();
}
Обратите внимание: не используйте EurekaClient в методах @PostConstruct, @Scheduled или другихApplicationContext
в методе, который еще не начался.
Удалить зависимости Джерси
По умолчанию EurekaClient использует Джерси в качестве средства связи HTTP.Если вы не хотите полагаться на Джерси, вы можете удалить зависимость от Джерси. Spring Cloud по умолчанию использует RestTempalte в качестве средства связи.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<exclusions>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-apache-client4</artifactId>
</exclusion>
</exclusions>
</dependency>
Почему регистрация в сервисе идет медленно
По умолчанию время пульса составляет 30 секунд. Экземпляр считается доступным только в том случае, если клиентский, серверный и клиентский кэши доступны одновременно. можно изменитьeureka.instance.leaseRenewalIntervalInSeconds
Параметр изменяет время сердцебиения. Старайтесь не изменять этот параметр.