Всем привет, я Ю~
На этой неделе давайте вместе зарегистрируемся в Nacos и станем рабочим узлом с частичной занятостью.
В этой статье приведен полный пример кода, см.GitHub.com/Y u — День V/SP…изlabx-01-spring-cloud-alibaba-nacos-discoveryсодержание.
Оригинальность не так проста, дай мне немногоStarЭй, пошли утку!
1 Обзор
В этой статье мы узнаемSpring Cloud Alibabaкоторый предоставилSpring Cloud Alibaba Nacos DiscoveryКомпоненты, основанные на модели программирования Spring Cloud, обращаются к Nacos как к реестру для реализации регистрации и обнаружения сервисов.
Регистрация/обнаружение службы: Nacos Discovery
Обнаружение службы — один из наиболее важных компонентов в системе микросервисной архитектуры. Если вы попытаетесь вручную настроить список услуг всех поставщиков услуг для каждого клиента, это будет очень сложно и не способствует динамическому расширению и сокращению услуг.
Nacos Discovery может помочь вам автоматически регистрировать службы на сервере Nacos и может динамически воспринимать и обновлять список служб экземпляра службы.
Кроме того, Nacos Discovery также регистрирует некоторые метаданные самого экземпляра службы, такие как хост, порт, URL-адрес проверки работоспособности, домашняя страница и т. д., в Nacos.
Прежде чем приступить к этой статье, толстые друзья должны провести простое исследование Nacos. может читать"Минималистское введение Nacos"В статье после прочтения первого и второго разделов соберите службу Nacos на этой машине.
2. Принципы реестра
Прежде чем приступить к сборке примера Nacos Discovery, давайте кратко разберемся в принципе работы реестра.
При использовании реестра существует три роли: поставщик услуг, потребитель услуг и реестр.
В некоторых статьях поставщик услуг называется сервером, а потребитель услуг — клиентом. Толстые друзья могут знать.
Три роли взаимодействуют, как показано на следующем рисунке:
1 провайдер:
- Когда вы начинаете реестррегистрЭто экземпляр (Instance) службы (Service).
- При этом периодически отправлять Реестрсердцебиение, сказать себе, что он еще жив.
- При закрытии сообщить в Реестротменить регистрацию.
② Потребитель:
- При запуске в реестрподпискаИспользуемые сервисы и кэширует список экземпляров сервисов в памяти.
- Впоследствии Потребитель инициирует Провайдера соответствующей услугиперечислить, выберите один из экземпляров службы в памяти и совершите удаленный вызов.
- При закрытии сообщить в Реестротписаться.
③ Реестр:
- Срок действия провайдера не истек после определенного периода временисердцебиениеПри удалении из списка экземпляров сервиса.
- Когда список экземпляров службы изменяется (добавляется или удаляется), уведомляйте потребителя, который подписывается на службу, чтобы потребитель мог обновить локальный кэш.
Конечно, разные реестры могут иметь немного разные принципы реализации. Например,EurekaРеестр не предоставляет функций уведомления, но Eureka Client регулярно опрашивает локальный кеш.
Кроме того, Provider и Consumer — это определения ролей, службыв то же времяТо есть это может быть Provider или Consumer. Например, служба купонов может предоставлять интерфейс для службы заказов и в то же время вызывать интерфейс, предоставляемый пользовательской службой.
3. Начало работы
Пример кода соответствует складу:
- поставщики услуг:
labx-01-sca-nacos-discovery-demo01-provider
- Потребители услуг:
labx-01-sca-nacos-discovery-demo01-consumer
В этом разделе давайте создадим пример быстрого запуска компонента Nacos Discovery. Действуйте следующим образом:
- Во-первых, создайте поставщика услуг
demo-provider
, зарегистрируйте службу в Nacos. - Затем создайте потребителя службы
demo-consumer
, Получить от Накоdemo-provider
Список экземпляров службы, выберите один из них, чтобы выполнить удаленный HTTP-вызов.
3.1 Создание поставщика услуг
Создайтеlabx-01-sca-nacos-discovery-demo01-provider
проект, как поставщик услугdemo-provider
. Окончательный код проекта показан ниже:
3.1.1 Знакомство с зависимостями
существуетpom.xml
В файле в основном представлены зависимости, связанные с Spring Cloud Nacos Discovery. код показывает, как показано ниже:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>labx-01</artifactId>
<groupId>cn.iocoder.springboot.labs</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>labx-01-sca-nacos-discovery-demo01-provider</artifactId>
<properties>
<spring.boot.version>2.2.4.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR1</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<!--
引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 Spring Cloud Alibaba Nacos Discovery 相关依赖,将 Nacos 作为注册中心,并实现对其的自动配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>
Дружеское напоминание: это немного долго, не паникуйте~
существует<dependencyManagement />
В разделе мы представили файлы спецификаций Spring Boot, Spring Cloud и Spring Cloud Alibaba для управления версиями зависимостей и предотвращения несовместимости. существует«Официальная документация Spring Cloud — Примечания к выпуску»В документации рекомендуются зависимости трех. Следующая таблица:
Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
---|---|---|
Spring Cloud Greenwich | 2.1.1.RELEASE | 2.1.X.RELEASE |
Spring Cloud Finchley | 2.0.1.RELEASE | 2.0.X.RELEASE |
Spring Cloud Edgware | 1.5.1.RELEASE | 1.5.X.RELEASE |
- Здесь мы выбираем версию Spring Cloud Alibaba как
2.2.0.RELEASE
. - В текущей версии мы используем версию Nacos:
1.1.4
.
вводитьspring-cloud-starter-alibaba-nacos-discovery
Зависимость, используйте Nacos в качестве реестра и реализуйте его автоматическую настройку.
3.1.2 Профиль
Создайтеapplication.yaml
Файл конфигурации, добавьте элементы конфигурации Nacos Discovery. Конфигурация выглядит следующим образом:
spring:
application:
name: demo-provider # Spring 应用名
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
service: ${spring.application.name} # 注册到 Nacos 的服务名。默认值为 ${spring.application.name}。
server:
port: 18080 # 服务器端口。默认为 8080
сконцентрируйсяspring.cloud.nacos.discovery
Элемент конфигурации, который является префиксом элемента конфигурации Nacos Discovery, соответствующийNacosDiscoveryPropertiesэлемент конфигурации.
3.1.3 DemoProviderApplication
СоздайтеDemoProviderApplicationclass, создайте класс запуска приложения и предоставьте интерфейс HTTP. код показывает, как показано ниже:
@SpringBootApplication
@EnableDiscoveryClient
public class DemoProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DemoProviderApplication.class, args);
}
@RestController
static class TestController {
@GetMapping("/echo")
public String echo(String name) {
return "provider:" + name;
}
}
}
①@SpringBootApplication
Аннотация, добавленная к классу, объявляет, что это приложение Spring Boot. Spring Cloud построен поверх Spring Boot, поэтому его необходимо добавить.
②@EnableDiscoveryClient
Аннотация для включения функции обнаружения регистрации Spring Cloud. Однако, начиная с версии Spring Cloud Edgware, фактически нет необходимости добавлять@EnableDiscoveryClient
Аннотация, если вводится компонент обнаружения регистрации Spring Cloud, функция обнаружения регистрации будет автоматически включена. Например, мы представили здесьspring-cloud-starter-alibaba-nacos-discovery
Зависимость, не нужно добавлять@EnableDiscoveryClient
Аннотированный.
Расширение небольших знаний: в общий проект пружины облака определяетсяDiscoveryClientИнтерфейс, как общий поиск клиентов, предоставление услуг чтения и метод API для чтения списка услуг. И вы хотите интегрировать в реестр компонентов системы Spring Cloud, DiscoveryClient необходимо предоставить соответствующий класс реализации.
Например, Spring Cloud Alibaba Nacos Discovery предоставляетNacosDiscoveryClientРеализация, Spring Cloud Netflix Eureka обеспечиваетEurekaDiscoveryClientвыполнить.
Таким образом, все места, которые необходимо использовать, должны получить клиент DiscoveryClient, не обращая внимания на конкретную реализацию, чтобы обеспечить ее универсальность.
③ Класс TestController, обеспечивающий/echo
интерфейс, возвратprovider:${name}
результат.
3.1.4 Простой тест
① Запустите поставщика услуг через DemoProviderApplication, вывод журнала консоли IDEA, например:
// ... 省略其它日志
2020-02-08 15:25:57.406 INFO 27805 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP demo-provider 10.171.1.115:18080 register finished
- Служить
demo-provider
Зарегистрируйтесь в журнале на Nacos.
② Откройте консоль Nacos, вы увидите сервис в списке сервисов.demo-provider
. Как показано ниже:
3.2 Создание потребительских услуг
Создайтеlabx-01-sca-nacos-discovery-demo01-consumer
проект, как поставщик услугdemo-consumer
. Окончательный код проекта показан ниже:
Код всего проекта в основном такой же, как у сервис-провайдера, в конце концов, это пример кода 😜
3.2.1 Знакомство с зависимостями
и«3.1.1 Знакомство с зависимостями»Например, просто изменить Maven<artifactId />
заlabx-01-sca-nacos-discovery-demo01-consumer
,Видетьpom.xml
документ.
3.2.2 Файл конфигурации
Создайтеapplication.yaml
Файл конфигурации, добавьте соответствующие элементы конфигурации. Конфигурация выглядит следующим образом:
spring:
application:
name: demo-consumer # Spring 应用名
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
server:
port: 28080 # 服务器端口。默认为 8080
и«3.1.2 Файл конфигурации»В основном то же самое, в основном для настройки проектаspring.application.name
превратиться вdemo-consumer
.
3.2.3 DemoConsumerApplication
СоздайтеDemoConsumerApplicationкласс, создайте класс запуска приложения и предоставьте интерфейс HTTP для вызова поставщика услуг. код показывает, как показано ниже:
@SpringBootApplication
// @EnableDiscoveryClient
public class DemoConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DemoConsumerApplication.class, args);
}
@Configuration
public class RestTemplateConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@RestController
static class TestController {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/hello")
public String hello(String name) {
// <1> 获得服务 `demo-provider` 的一个实例
ServiceInstance instance;
if (true) {
// 获取服务 `demo-provider` 对应的实例列表
List<ServiceInstance> instances = discoveryClient.getInstances("demo-provider");
// 选择第一个
instance = instances.size() > 0 ? instances.get(0) : null;
} else {
instance = loadBalancerClient.choose("demo-provider");
}
// <2> 发起调用
if (instance == null) {
throw new IllegalStateException("获取不到实例");
}
String targetUrl = instance.getUri() + "/echo?name=" + name;
String response = restTemplate.getForObject(targetUrl, String.class);
// 返回结果
return "consumer:" + response;
}
}
}
①@EnableDiscoveryClient
Примечания, как это не нужно добавлять, поэтому у нас был комментарий по причинам, которые уже объяснены выше.
② Класс конфигурации RestTemplateConfiguration, создайтеRestTemplateБоб. RestTemplate — это класс инструмента шаблона HTTP-вызова, предоставляемый Spring, который может облегчить нам вызов HTTP API поставщика услуг позже.
③ TestController предоставляет/hello
Интерфейс для вызова поставщика услуг/demo
интерфейс. Код занимает несколько строк, давайте немного его объясним.
discoveryClient
Свойства, объект DiscoveryClient, клиент обнаружения службы, мы уже представили его выше. То, что мы вводим здесь, — это не NacosDiscoveryClient, предоставляемый Nacos Discovery для обеспечения универсальности. В дальнейшем, если мы не будем использовать Nacos в качестве реестра, а будем использовать Eureka или Zookeeper, здесь код менять не нужно.
loadBalancerClient
Атрибуты,LoadBalancerClientОбъект, клиент балансировщика нагрузки. Мы будем использовать его позже, услуга, полученная от Nacosdemo-provider
из списка экземпляров выберите один для выполнения HTTP-вызова.
Расширение небольших знаний: в проекте Spring Cloud Common это определеноLoadBalancerClientИнтерфейс, как общий клиент балансировки нагрузки, предоставляет методы API, такие как выбор экземпляра из указанной службы и инициирование запросов к указанной службе. Для компонентов балансировки нагрузки, которые необходимо интегрировать в систему Spring Cloud, необходимо предоставить соответствующий класс реализации LoadBalancerClient.
Например, лента Spring Cloud Netflix предоставляетRibbonLoadBalancerClientвыполнить.
Таким образом, все места, которые необходимо использовать, должны получить клиент DiscoveryClient, не обращая внимания на конкретную реализацию, чтобы обеспечить ее универсальность. 😈 Однако похоже, что в системе Spring Cloud пока есть только один компонент балансировки нагрузки Ribbon.
Конечно, список экземпляров услуг LoadBalancerClient предоставляется DiscoveryClient.
/hello
Интерфейс, пример интерфейса, выполняет HTTP-вызов поставщику услуг.
-
<1>
получить услугуdemo-provider
экземпляр . Здесь мы предоставляем код двумя способами, основанными на DiscoveryClient и LoadBalancerClient. -
<2>
, с помощью полученного объекта ServiceInstance экземпляра службы соедините целевой URL-адрес запроса, а затем используйте RestTemplate для инициирования HTTP-вызова.
3.2.4 Простой тест
1 Запустите потребителей услуг с помощью Democonsumerapplication, выходных журналов IDEA consuplation, таких как:
// ... 省略其它日志
2020-02-08 18:05:35.810 INFO 35047 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP demo-consumer 10.171.1.115:28080 register finished
- Служить
demo-consumer
Зарегистрируйтесь в журнале на Nacos.
Обратите внимание, что потребители служб и поставщики служб — это концепции ролей, и по сути они являются службами, которые могут регистрироваться в реестре.
② Откройте консоль Nacos, вы увидите сервис в списке сервисов.demo-consumer
. Как показано ниже:
③ Доступ к сервисупотребительизhttp://127.0.0.1:28080/hello?name=yudaoyuanmaинтерфейс, возвращаемый результат"consumer:provider:yudaoyuanma"
. Описание, вызов удаленногопоставщики услугуспех.
④ Откройте консоль Nacos, вы можете увидеть отношения подписки в списке подписчиков. Как показано ниже:
⑤ Закрыть сервиспровайдер, посетить сноваhttp://127.0.0.1:28080/hello?name=yudaoyuanmaИнтерфейс, возвращаемый результат - сообщение об ошибке"获取不到实例"
, описывающий наш локально кэшированный сервисdemo-provider
список экземпляров был обновлен без экземпляров.
😈 Здесь мы не демонстрируем тест запуска нескольких сервис-провайдеров, вы можете попробовать сами.
4. Подробное объяснение концепции Nacos
Дружеское напоминание: содержание этого раздела основано на следующих двух документах, и я рекомендую толстым друзьям следить за ними:
4.1 Модель данных
Ключ модели данных Nacos однозначно идентифицируется тройками. Как показано ниже:
- В качестве реестра пространство имен + группа + служба
- Как центр конфигурации, пространство имен + группа + идентификатор данных
Давайте рассмотрим концепции пространства имен, группы и службы.
4.1.1 Пространство имен
Используется для гранулированной изоляции конфигурации арендатора. По умолчанию общедоступное (общедоступное пространство имен).
Конфигурации с одной и той же группой или идентификатором данных могут существовать в разных пространствах имен. Одним из распространенных сценариев пространства имен является разграничение и изоляция конфигурации различных сред, например изоляция ресурсов (например, конфигураций и служб) в среде разработки и тестирования и в производственной среде.
позже"6. Конфигурация с несколькими средами"В этом разделе мы изолируем службы в разных средах с помощью пространства имен.
4.1.2 Группировка групповых услуг
Различные услуги могут быть объединены в одну группу. По умолчанию DEFAULT_GROUP (группировка по умолчанию).
4.1.3 Сервисное обслуживание
Например, обслуживание пользователей, обслуживание заказов, товарное обслуживание и т. д.
4.2 Модель сервисного домена
Служба может дополнительно подразделить модель предметной области службы, как показано ниже:
Давайте рассмотрим концепцию каждого «узла» на графике.
4.2.1 Экземпляр экземпляра
Процесс с доступным сетевым адресом (IP:Port), предоставляющий одну или несколько служб.
мы начинаем с«3.1 Создание поставщика услуг»Раздел например:
- Если мы начнемОдинПроцесс JVM — это служба
demo-provider
внизОдинпример. - Если мы начнемнесколькоПроцесс JVM — это служба
demo-provider
внизнесколькопример.
4.2.2 кластер кластера
Все экземпляры службы в рамках одной службы образуют кластер по умолчанию (по умолчанию). Кластеры могут быть дополнительно разделены в соответствии с требованиями, а единицей разделения могут быть виртуальные кластеры.
Например, мы развертываем сервисы в нескольких компьютерных залах, каждый из которых может быть создан как виртуальный кластер. Когда каждая служба регистрируется в Nacos, устанавливается виртуальный кластер компьютерного зала, в котором она расположена. Таким образом, когда служба вызывает другие службы, она может предпочтительно вызывать службу локальной компьютерной комнаты через виртуальный кластер. Таким образом, при улучшении доступности службы гарантируется производительность.
4.2.3 Метаданные Метаданные
Метаданные Nacos (такие как конфигурация и служба) описывают информацию, такую как версия службы, вес, стратегия аварийного восстановления, стратегия балансировки нагрузки, конфигурация аутентификации и различные настраиваемые метки.
По сфере действия она делится на метаинформацию уровня службы, метаинформацию кластера и метаинформацию экземпляра. Как показано ниже:
В метаданных NACOSСервисная версияНапример. Когда реализован интерфейс и происходит несовместимое обновление, для перехода можно использовать номер версии, а службы с разными номерами версий не ссылаются друг на друга.
Миграцию версии можно выполнить, выполнив следующие действия:
- В периоды низкой нагрузки сначала обновите половину провайдеров до новой версии.
- Затем обновите всех потребителей до новой версии.
- Затем обновите оставшуюся половину провайдеров до новой версии.
Снова метаданные NacosКонфигурация аутентификацииНапример. Управляйте разрешениями в реестре с помощью проверки маркеров, чтобы решить, следует ли выдавать токены потребителям, что может помешать потребителям обходить реестр для доступа к поставщикам. Кроме того, способ авторизации можно гибко менять через реестр без модификации или обновления провайдера.
4.2.4 Проверка работоспособности
Проверьте работоспособность экземпляра, подключенного к службе, указанным способом, чтобы убедиться, что экземпляр может предоставить службу. В зависимости от результатов проверки экземпляр оценивается как исправный или нездоровый.
Неработоспособные экземпляры не возвращаются клиенту при отправке запроса на разрешение в службу.
порог охраны здоровья
Чтобы предотвратить перенаправление всего трафика на работоспособные экземпляры из-за слишком большого количества неработоспособных экземпляров, а затем привести к тому, что давление трафика перегрузит работоспособные экземпляры и сформирует лавинный эффект, порог защиты работоспособности должен быть определен как число с плавающей запятой от 0 до 1.
Если доля работоспособных экземпляров доменного имени в общем количестве экземпляров службы меньше этого значения, этот экземпляр будет возвращен клиенту независимо от того, работоспособен он или нет. Хотя часть трафика теряется, это гарантирует нормальную работу оставшихся работоспособных экземпляров кластера.
4.3 Резюме
Чтобы толстые друзья лучше понимали, мы организуем модель данных и модель домена службы, как показано на следующем рисунке:
5. Дополнительная информация об элементе конфигурации
существует«3. Быстрый старт»В этом разделе мы используем только две элементы конфигурации NACOS Discovery Starter для быстрого запуска. На самом деле, NACOS Discovery Starter предоставляет много элементов конфигурации, мы ссылаемся наДокументацияСортируйте элементы конфигурации вместе.
Связанный сервер Nacos
элемент конфигурации | Key | инструкция |
---|---|---|
адрес сервера | spring.cloud.nacos.discovery.server-addr |
IP-адрес сервера Nacos и начало прослушивания порта |
AccessKey | spring.cloud.nacos.discovery.access-key |
При переходе в Alibaba Cloud имя облачной учетной записи в Alibaba Cloud |
SecretKey | spring.cloud.nacos.discovery.secret-key |
При переходе в Alibaba Cloud пароль облачной учетной записи в Alibaba Cloud |
связанные с обслуживанием
элемент конфигурации | Key | инструкция |
---|---|---|
Пространства имен | spring.cloud.nacos.discovery.namespace |
Один общий сценарий регистрируется для разделения различных сред, таких как тестовая среда разработки и производственная среда изоляции ресурсов (таких как конфигурация, служба). |
группировка услуг | spring.cloud.nacos.discovery.group |
Различные услуги могут быть объединены в одну группу. По умолчаниюDEFAULT_GROUP
|
наименование услуги | spring.cloud.nacos.discovery.service |
Зарегистрированное имя службы. По умолчанию${spring.application.name}
|
кластер | spring.cloud.nacos.discovery.cluster-name |
Имя кластера Nacos. По умолчаниюDEFAULT
|
Веса | spring.cloud.nacos.discovery.weight |
Значение варьируется от 1 до 100. Чем больше значение, тем больше вес. По умолчанию 1 |
Metadata | spring.cloud.nacos.discovery.metadata |
Используя конфигурацию формата карты, пользователи могут настраивать некоторые метаданные, связанные с услугами, в соответствии со своими потребностями. |
Стоит ли открывать часы Nacos | spring.cloud.nacos.discovery.watch.enabled |
можно установить наfalse выключить часы. По умолчаниюtrue
|
Связанные с сетью
элемент конфигурации | Key | инструкция |
---|---|---|
имя сетевой карты | spring.cloud.nacos.discovery.network-interface |
Когда IP не настроен, зарегистрированный IP является IP-адресом, соответствующим этой сетевой карте.Если этот пункт не настроен, по умолчанию берется адрес первой сетевой карты. |
зарегистрированный IP-адрес | spring.cloud.nacos.discovery.ip |
наивысший приоритет |
зарегистрированный порт | spring.cloud.nacos.discovery.port |
По умолчанию настройка не требуется, и она будет обнаружена автоматически. По умолчанию-1
|
Другие связанные
элемент конфигурации | Key | инструкция |
---|---|---|
Интегрировать ли ленту | ribbon.nacos.enabled |
Обычно устанавливается наtrue Вот и все. По умолчаниюtrue
|
имя файла журнала | spring.cloud.nacos.discovery.log-name |
|
Точка доступа | spring.cloud.nacos.discovery.endpoint |
Входное доменное имя сервиса в регионе, через который можно динамически получить адрес сервера |
6. Мультисредовая конфигурация
Пример кода соответствует складу:
- поставщики услуг:
labx-01-sca-nacos-discovery-demo02-provider
- Потребители услуг:
labx-01-sca-nacos-discovery-demo02-consumer
Этот же сервис мы будем развертывать в средах разработки, тестирования, предварительного выпуска, производства и других средах, затем нам нужно добавить в проект конфигурации Nacos для разных сред. Как правило, для разработки и тестирования используется один и тот же Nacos, а для предварительного выпуска и производства используется другой Nacos. Так как же нам изолировать разные среды для одних и тех же Naco?
На самом деле разработчики Nacos уже рассказали нам, как это сделать, через NacosNamespaceПространства имен. В документации указано следующее:
FROM «Документация Nacos - концепции Nacos»
Пространства имен, который используется для изоляции гранулярной конфигурации арендатора. Конфигурации с одной и той же группой или идентификатором данных могут существовать в разных пространствах имен. Одним из распространенных сценариев пространства имен является разграничение и изоляция конфигурации различных сред, например изоляция ресурсов (например, конфигураций и служб) в среде разработки и тестирования и в производственной среде.
Далее давайте создадим пример конфигурации с несколькими средами. Действуйте следующим образом:
- Во-первых, мы создадим пространство имен, используемое в среде разработки в Nacos, как
dev
, пространство имен, используемое тестовой средой,uat
. - Затем создайте поставщика услуг
demo-provider
,использоватьразвиватьКонфигурация среды, регистрация службы в Nacosdev
в пространстве имен. - После этого создайте потребителя услуги
demo-consumer
, который звонит поставщику услугdemo-provider
Предоставляется HTTP-интерфейс.- использовать сначаларазвиватьконфигурация среды, поскольку служба
demo-provider
дав Накосеdev
Пространство имен зарегистрировано, поэтому назовите егоуспех. - после использованияконтрольная работаконфигурация среды, поскольку служба
demo-provider
Нетв Накосеuat
Пространство имен зарегистрировано, поэтому назовите егоПотерпеть поражение,
- использовать сначаларазвиватьконфигурация среды, поскольку служба
Дружеское напоминание: в проекте Spring Boot (Spring Cloud) можно использовать механизм профилей на основе
spring.profiles.active
Элемент конфигурации, который позволяет различным средам читать разные файлы конфигурации.Толстые друзья, которые не знают, вы можете взглянуть«Начало работы с файлом конфигурации Spring Boot»из"6. Конфигурация с несколькими средами"подраздел.
6.1 Создание пространства имен Nacos
① Откройте меню «Пространство имен» пользовательского интерфейса Nacos и войдите в функцию «Пространство имен». Как показано ниже:
② Нажмите кнопку «Новое пространство имен» в правом верхнем углу списка, и появится окно «Новое пространство имен» для создания нового пространства имен.dev
Пространства имен. Введите следующее содержимое и нажмите кнопку «ОК», чтобы завершить создание. Как показано ниже:
③ Повторите эту операцию и продолжайте создаватьuat
Пространства имен. наконец-тоdev
иuat
Информация следующая:
6.2 Поставщики строительных услуг
от«3.1 Создание поставщика услуг»подразделlabx-01-sca-nacos-discovery-demo01-provider
проект, копироватьlabx-01-sca-nacos-discovery-demo02-provider
проект. Затем внесите в него изменения, чтобы облегчить строительство~
6.2.1 Файл конфигурации
Исправлятьapplication.yaml
Файл конфигурации, удалите элемент конфигурации Nacos Discovery и позже добавьте его в файл конфигурации другой среды. Конфигурация выглядит следующим образом:
spring:
application:
name: demo-provider # Spring 应用名
server:
port: 18080 # 服务器端口。默认为 8080
Создайтесреда разработкив использованииapplication-dev.yaml
файл конфигурации, добавьте пространство имен вdev
Элемент конфигурации Nacos Discovery. Конфигурация выглядит следующим образом:
spring:
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
namespace: 14226a0d-799f-424d-8905-162f6a8bf409 # Nacos 命名空间 dev 的编号
Создайтетестовая средав использованииapplication-uat.yaml
файл конфигурации, добавьте пространство имен вuat
Элемент конфигурации Nacos Discovery. Конфигурация выглядит следующим образом:
spring:
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
namespace: bc8c8c2d-bd85-42bb-ada3-1a8f940ceb20 # Nacos 命名空间 uat 的编号
6.2.2 Простой тест
Ниже мы используем аргументы командной строки для--spring.profiles.active
Элементы конфигурации, реализация различных сред и чтение различных файлов конфигурации.
① Сначала настройте--spring.profiles.active
заdev
, установите DemoProviderApplication для чтенияapplication-dev.yaml
конфигурационный файл. Как показано ниже:
Затем запустите поставщика услуг через DemoProviderApplication.
② Откройте консоль Nacos, вы увидите сервис в списке сервисов.demo-provider
зарегистрирован в пространстве именdev
Вниз. Как показано ниже:
6.3 Потребители строительных услуг
от«3.2 Потребители строительных услуг»подразделlabx-01-sca-nacos-discovery-demo01-consumer
проект, копироватьlabx-01-sca-nacos-discovery-demo02-consumer
проект. Затем внесите в него изменения, чтобы облегчить строительство~
6.3.1 Файлы конфигурации
Дружеское напоминание: и«6.2.1 Файл конфигурации»Содержание подразделов в основном одинаковое, а придирки повторяются.
Исправлятьapplication.yaml
Файл конфигурации, удалите элемент конфигурации Nacos Discovery и позже добавьте его в файл конфигурации другой среды. Конфигурация выглядит следующим образом:
spring:
application:
name: demo-consumer # Spring 应用名
server:
port: 28080 # 服务器端口。默认为 8080
Создайтесреда разработкив использованииapplication-dev.yaml
файл конфигурации, добавьте пространство имен вdev
Элемент конфигурации Nacos Discovery. Конфигурация выглядит следующим образом:
spring:
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
namespace: 14226a0d-799f-424d-8905-162f6a8bf409 # Nacos 命名空间 dev 的编号
Создайтетестовая средав использованииapplication-uat.yaml
файл конфигурации, добавьте пространство имен вuat
Элемент конфигурации Nacos Discovery. Конфигурация выглядит следующим образом:
spring:
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
namespace: bc8c8c2d-bd85-42bb-ada3-1a8f940ceb20 # Nacos 命名空间 uat 的编号
6.2.3 Простой тест
Ниже мы используем аргументы командной строки для--spring.profiles.active
Элементы конфигурации, реализация различных сред и чтение различных файлов конфигурации.
① Сначала настройте--spring.profiles.active
заdev
, установите DemoConsumerApplication для чтенияapplication-dev.yaml
конфигурационный файл. Как показано ниже:
Затем запустите потребителя службы через DemoConsumerApplication.
служба доступапотребительизhttp://127.0.0.1:28080/hello?name=yudaoyuanmaинтерфейс, возвращаемый результат"consumer:provider:yudaoyuanma"
. Описание, вызов удаленногопоставщики услуг【успех】.
② Реконфигурация--spring.profiles.active
заuat
, установите DemoConsumerApplication для чтенияapplication-uat.yaml
конфигурационный файл. Как показано ниже:
Затем запустите потребителя службы через DemoConsumerApplication.
служба доступапотребительизhttp://127.0.0.1:28080/hello?name=yudaoyuanmaинтерфейс, результатом возврата является сообщение об ошибке"获取不到实例"
. Описание, вызов удаленногопоставщики услуг【Потерпеть поражение】.
Причина в том, что хотя службаdemo-provider
был запущен, потому что он зарегистрирован в пространстве имен Nacos какdev
, что приводит к сервису, запущенному на шаге ①demo-consumer
Службу можно вызвать, и служба запущена на шаге ②demo-consumer
В службу дозвониться не удалось.
То есть мы можем пройти Nacos'sNamespaceРеализуйте изоляцию службы в разных средах. В будущем, после улучшения разрешений версии Nacos с открытым исходным кодом, каждое пространство имен будет предоставлять разные AccessKey и SecretKey, чтобы гарантировать, что только службы, которым известен пароль учетной записи, могут подключаться к соответствующему пространству имен, что еще больше повысит безопасность.
7. Отслеживайте конечные точки
Пример кода соответствует складу:
- поставщики услуг:
labx-01-sca-nacos-discovery-demo01-provider
- Потребители услуг:
labx-01-sca-nacos-discovery-demo03-consumer
Nacos Discovery основан на Spring Boot Actuator и предоставляет настраиваемые конечные точки мониторинга.nacos-discovery
, получить элементы конфигурации Nacos Discovery и информацию о подписке на услуги.
В то же время Nacos Discovery расширяет встроенный привод Spring Boot.health
конечная точка, через пользовательскийNacosDiscoveryHealthIndicator, получить статус соединения с сервером Nacos.
Дружеское напоминание: толстые друзья, которые не знают Spring Boot Actuator, могут прочитать его позже«Начало работы с активатором конечной точки Spring Boot Monitoring»статья.
Далее давайте создадим пример конечной точки мониторинга Nacos Discovery. Действуйте следующим образом:
- Во-первых, создайте поставщика услуг
demo-provider
, зарегистрируйте службу в Nacos. - Затем создайте потребителя службы
demo-consumer
, который звонит поставщику услугdemo-provider
Предоставляется HTTP-интерфейс. В то же время настройте конечную точку мониторинга Nacos Discovery, которая активирует потребителя службы. - Наконец, посетите конечную точку мониторинга Nacos Discovery потребителя службы, чтобы просмотреть возвращенные данные мониторинга.
7.1 Создание поставщика услуг
Прямое повторное использование«3.1 Создание поставщика услуг»подразделlabx-01-sca-nacos-discovery-demo01-provider
проект.
так какlabx-01-sca-nacos-discovery-demo01-provider
Проект не подписывается ни на какие услуги от Nacos и не может быть просмотрен полностью.nacos-discovery
Полный эффект конечной точки, поэтому мы пока не будем настраивать конечную точку мониторинга Nacos Discovery для этого проекта.
Однако в реальном проекте по-прежнему можно открыть конечную точку мониторинга Nacos Discovery в конфигурации, по крайней мере, вы можете увидеть элемент конфигурации Nacos Discovery.
7.2 Потребители строительных услуг
от«3.2 Потребители строительных услуг»подразделlabx-01-sca-nacos-discovery-demo01-consumer
проект, копироватьlabx-01-sca-nacos-discovery-demo03-consumer
проект. Затем внесите в него изменения, чтобы облегчить строительство~
7.2.1 Введение зависимостей
существуетpom.xml
В файле представлены дополнительные зависимости, связанные с Spring Boot Actuator. код показывает, как показано ниже:
<!-- 实现对 Actuator 的自动化配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
7.2.2 Файлы конфигурации
Исправлятьapplication.yaml
Файл конфигурации, добавьте элементы конфигурации Spring Boot Actuator. Конфигурация выглядит следующим образом:
management:
endpoints:
web:
exposure:
include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
endpoint:
# Health 端点配置项,对应 HealthProperties 配置类
health:
enabled: true # 是否开启。默认为 true 开启。
show-details: ALWAYS # 何时显示完整的健康信息。默认为 NEVER 都不展示。可选 WHEN_AUTHORIZED 当经过授权的用户;可选 ALWAYS 总是展示。
Для функции каждого элемента конфигурации вы можете увидеть добавленные комментарии. Если вы все еще не понимаете, читайте дальше«Начало работы с активатором конечной точки Spring Boot Monitoring»статья.
7.3 Простой тест
① Запустите поставщика услуг через DemoProviderApplication и запустите потребителя услуг через DemoConsumerApplication.
После этого войдите в сервиспотребительизhttp://127.0.0.1:28080/hello?name=yudaoyuanmaинтерфейс, возвращаемый результат"consumer:provider:yudaoyuanma"
. описание, позвоните на пультпоставщики услугуспех.
② Доступ к личному кабинету потребителя услугиnacos-discovery
Мониторинг конечных точекhttp://127.0.0.1:28080/actuator/nacos-discovery, возвращенный результат выглядит следующим образом:
В теории,"subscribe"
Поле должно возвращать подписку на услугуdemo-provider
информация, возвращаемый здесь результат пуст. Позже я посмотрел исходный код, мне нужно передать инициативу NacosEventDispatcherрегистрEventListenerТолько тогда может. Кашель, кашель, я чувствую, что эта настройка немного волшебна~
③ Доступ кhealth
Мониторинг конечных точекhttp://127.0.0.1:28080/actuator/health, возвращенный результат выглядит следующим образом:
666. Пасхальное яйцо
На данный момент мы завершили изучение Spring Cloud Alibaba Nacos Discovery. Ниже приведены официальные документы, относящиеся к Nacos:
- «Официальная документация Nacos»
- «Официальный документ Spring Cloud Alibaba — Nacos Discovery»
- «Официальный пример Spring Cloud Alibaba — Nacos Discovery»
Кроме того, толстые друзья, которые хотят использовать Nacos в качестве реестра в проекте Spring Boot, могут прочитать«Приступая к работе в центре регистрации Tao Dao Spring Boot Nacos»статья.