Самый сильный регистрационный центр Spring Cloud Nacos!

Java задняя часть
Самый сильный регистрационный центр Spring Cloud Nacos!

Всем привет, я Ю~

На этой неделе давайте вместе зарегистрируемся в 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. Начало работы

Пример кода соответствует складу:

В этом разделе давайте создадим пример быстрого запуска компонента Nacos Discovery. Действуйте следующим образом:

  • Во-первых, создайте поставщика услугdemo-provider, зарегистрируйте службу в Nacos.
  • Затем создайте потребителя службыdemo-consumer, Получить от Накоdemo-providerСписок экземпляров службы, выберите один из них, чтобы выполнить удаленный HTTP-вызов.

3.1 Создание поставщика услуг

Создайтеlabx-01-sca-nacos-discovery-demo01-providerпроект, как поставщик услугdemo-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. Окончательный код проекта показан ниже: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 однозначно идентифицируется тройками. Как показано ниже:Nacos 数据模型

  • В качестве реестра пространство имен + группа + служба
  • Как центр конфигурации, пространство имен + группа + идентификатор данных

Давайте рассмотрим концепции пространства имен, группы и службы.

4.1.1 Пространство имен

Используется для гранулированной изоляции конфигурации арендатора. По умолчанию общедоступное (общедоступное пространство имен).

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

позже"6. Конфигурация с несколькими средами"В этом разделе мы изолируем службы в разных средах с помощью пространства имен.

4.1.2 Группировка групповых услуг

Различные услуги могут быть объединены в одну группу. По умолчанию DEFAULT_GROUP (группировка по умолчанию).

4.1.3 Сервисное обслуживание

Например, обслуживание пользователей, обслуживание заказов, товарное обслуживание и т. д.

4.2 Модель сервисного домена

Служба может дополнительно подразделить модель предметной области службы, как показано ниже:Nacos 服务领域模型

Давайте рассмотрим концепцию каждого «узла» на графике.

4.2.1 Экземпляр экземпляра

Процесс с доступным сетевым адресом (IP:Port), предоставляющий одну или несколько служб.

мы начинаем с«3.1 Создание поставщика услуг»Раздел например:

  • Если мы начнемОдинПроцесс JVM — это службаdemo-providerвнизОдинпример.
  • Если мы начнемнесколькоПроцесс JVM — это службаdemo-providerвнизнесколькопример.

4.2.2 кластер кластера

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

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

4.2.3 Метаданные Метаданные

Метаданные Nacos (такие как конфигурация и служба) описывают информацию, такую ​​как версия службы, вес, стратегия аварийного восстановления, стратегия балансировки нагрузки, конфигурация аутентификации и различные настраиваемые метки.

По сфере действия она делится на метаинформацию уровня службы, метаинформацию кластера и метаинформацию экземпляра. Как показано ниже:元数据

FROM «Официальная документация Dubbo — несколько версий»

В метаданных NACOSСервисная версияНапример. Когда реализован интерфейс и происходит несовместимое обновление, для перехода можно использовать номер версии, а службы с разными номерами версий не ссылаются друг на друга.

Миграцию версии можно выполнить, выполнив следующие действия:

  1. В периоды низкой нагрузки сначала обновите половину провайдеров до новой версии.
  2. Затем обновите всех потребителей до новой версии.
  3. Затем обновите оставшуюся половину провайдеров до новой версии.

FROM «Официальная документация Dubbo — проверка токена»

Снова метаданные NacosКонфигурация аутентификацииНапример. Управляйте разрешениями в реестре с помощью проверки маркеров, чтобы решить, следует ли выдавать токены потребителям, что может помешать потребителям обходить реестр для доступа к поставщикам. Кроме того, способ авторизации можно гибко менять через реестр без модификации или обновления провайдера.

令牌验证

4.2.4 Проверка работоспособности

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

Неработоспособные экземпляры не возвращаются клиенту при отправке запроса на разрешение в службу.

порог охраны здоровья

Чтобы предотвратить перенаправление всего трафика на работоспособные экземпляры из-за слишком большого количества неработоспособных экземпляров, а затем привести к тому, что давление трафика перегрузит работоспособные экземпляры и сформирует лавинный эффект, порог защиты работоспособности должен быть определен как число с плавающей запятой от 0 до 1.

Если доля работоспособных экземпляров доменного имени в общем количестве экземпляров службы меньше этого значения, этот экземпляр будет возвращен клиенту независимо от того, работоспособен он или нет. Хотя часть трафика теряется, это гарантирует нормальную работу оставшихся работоспособных экземпляров кластера.

4.3 Резюме

Чтобы толстые друзья лучше понимали, мы организуем модель данных и модель домена службы, как показано на следующем рисунке:Nacos 概念小结

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. Мультисредовая конфигурация

Пример кода соответствует складу:

Этот же сервис мы будем развертывать в средах разработки, тестирования, предварительного выпуска, производства и других средах, затем нам нужно добавить в проект конфигурации 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конфигурационный файл. Как показано ниже:IDEA 配置 - dev

Затем запустите поставщика услуг через 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конфигурационный файл. Как показано ниже:IDEA 配置 - dev

Затем запустите потребителя службы через DemoConsumerApplication.

служба доступапотребительизhttp://127.0.0.1:28080/hello?name=yudaoyuanmaинтерфейс, возвращаемый результат"consumer:provider:yudaoyuanma". Описание, вызов удаленногопоставщики услуг【успех】.

② Реконфигурация--spring.profiles.activeзаuat, установите DemoConsumerApplication для чтенияapplication-uat.yamlконфигурационный файл. Как показано ниже:IDEA 配置 - uat

Затем запустите потребителя службы через DemoConsumerApplication.

служба доступапотребительизhttp://127.0.0.1:28080/hello?name=yudaoyuanmaинтерфейс, результатом возврата является сообщение об ошибке"获取不到实例". Описание, вызов удаленногопоставщики услуг【Потерпеть поражение】.

Причина в том, что хотя службаdemo-providerбыл запущен, потому что он зарегистрирован в пространстве имен Nacos какdev, что приводит к сервису, запущенному на шаге ①demo-consumerСлужбу можно вызвать, и служба запущена на шаге ②demo-consumerВ службу дозвониться не удалось.

То есть мы можем пройти Nacos'sNamespaceРеализуйте изоляцию службы в разных средах. В будущем, после улучшения разрешений версии Nacos с открытым исходным кодом, каждое пространство имен будет предоставлять разные AccessKey и SecretKey, чтобы гарантировать, что только службы, которым известен пароль учетной записи, могут подключаться к соответствующему пространству имен, что еще больше повысит безопасность.

7. Отслеживайте конечные точки

Пример кода соответствует складу:

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, возвращенный результат выглядит следующим образом:nacos-discovery 监控端点

В теории,"subscribe"Поле должно возвращать подписку на услугуdemo-providerинформация, возвращаемый здесь результат пуст. Позже я посмотрел исходный код, мне нужно передать инициативу NacosEventDispatcherрегистрEventListenerТолько тогда может. Кашель, кашель, я чувствую, что эта настройка немного волшебна~

③ Доступ кhealthМониторинг конечных точекhttp://127.0.0.1:28080/actuator/health, возвращенный результат выглядит следующим образом:health 监控端点

666. Пасхальное яйцо

На данный момент мы завершили изучение Spring Cloud Alibaba Nacos Discovery. Ниже приведены официальные документы, относящиеся к Nacos:

Кроме того, толстые друзья, которые хотят использовать Nacos в качестве реестра в проекте Spring Boot, могут прочитать«Приступая к работе в центре регистрации Tao Dao Spring Boot Nacos»статья.