Введение в Spring Cloud Alibaba Nacos Discovery

Spring Cloud

Nacos, для чего он используется в Spring Cloud Alibaba?официальная документацияОписано в:

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

С помощью Spring Cloud Alibaba Nacos Discovery вы можете быстро получить доступ к функции регистрации службы Nacos с помощью модели программирования Spring Cloud.

Ссылаясь на рисунок ниже, Nacos выполняет функции обнаружения, настройки и управления услугами.

Регистрация и обнаружение службы Nacos Discovery

Проблемы, решаемые обнаружением регистрации службы

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

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

Установите и запустите Nacos

Ссылаться наУстановка и запуск Nacos

После успешного запуска посетитеhttp://ip:8848/nacosВидимая страница управления, имя пользователя/пароль по умолчаниюnacos / nacos

Представлено в проекте

После запуска службы Nacos поставщики услуг и потребители услуг должны активно регистрироваться в Nacos, чтобы получать вызовы от служб, зарегистрированных на зарегистрированных Nacos, и вызывать службы, вызываемые на Nacos.

Как работает этот процесс регистрации?

  • Представлено в сервисном приложенииspring-cloud-starter-alibaba-nacos-discovery

    <!--项目启动为一个spring boot web项目-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--用于服务健康检查-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--用于将自己注册到Nacos-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  • Настройте адрес службы Nacos и имя, чтобы зарегистрировать эту службу как

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.162.1:8848
      application:
        name: nacos-provider
    #web端点暴露
    management:
      endpoints:
        web:
          exposure:
            include: "*"    
    
  • Добавьте один в классическую конфигурацию загрузочного приложения Spring.@EnableDiscoveryClientаннотация

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class, args);
        }
    
        @RestController
        public class EchoController{
            @GetMapping("/echo/{string}")
            public String echo(@PathVariable String string){
                return "Hello Nacos Discovery " + string;
            }
        }
    }
    

После успешного запуска вы увидите, что служба зарегистрирована в списке служб на странице управления Nacos:

маленькая яма

Я не обратил внимания, когда началВерсии Spring Cloud и Spring bootСоответственно ошибка все время запускалась, можно обратиться кэта ссылкаВозвращаемый результат соответствует версии Spring Cloud и загрузки Spring.

потребители услуг

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

Посмотрев на зависимости maven, я обнаружил, чтоspring-cloud-starter-alibaba-nacos-discoveryмодуль зависит отspring-cloud-starter-netflix-ribbonмодуль,ribbonОбеспечивает функцию балансировки нагрузки, мы можемвводить то, что он даетRibbonLoadBalancerClientдля получения услуг в реестре Nacos,ПотомОбъединить Spring RestTemplateЧтобы получить доступ:

// spring 完成了自动配置,直接注入
@Autowired
LoadBalancerClient loadBalancerClient;

@Autowired
RestTemplate restTemplate; // 省略创建为bean的过程

@GetMapping("/echo/app-name")
public String echoAppName(){
    // 负载均衡地获取一个服务提供者服务实例
    ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
    // 使用RestTemplate访问
    String requestUrl = String.format("http://%s:%s/echo/%s", serviceInstance.getHost(), serviceInstance.getPort(), applicationName);
    return restTemplate.getForObject(requestUrl, String.class);
}

После запуска потребителя вы можете запустить несколько поставщиков услуг с разными портами (по идее нужно отредактировать конфигурацию запуска, выбратьAllow parallel run), после доступа к внешнему интерфейсу потребителя можно обнаружить, что запросы распределяются между различными поставщиками услуг сбалансированным образом.

Конечная точка обнаружения Nacos

для подключения кNacos Discoveryклиентов, таких как поставщики услуг и потребители услуг,spring cloud alibaba nacos discoveryпредоставилEndPointКонечная точка:

http://ip-addr/actuator/nacos-discovery

может вернутьсяСписок сервисов, на которые подписан сервиса такжесервисnacos discoveryинформация о конфигурации.

Глядя на исходный код, эта конечная точка передается черезspring boot actuatorв модулеEndPointреализация, класс реализацииNacosDiscoveryEndpoint

// NacosDiscoveryEndpoint.java
// 核心代码(有省略)
public Map<String, Object> nacosDiscovery() {
    // nacos discovery会给注册的服务本地生成一个NamingService实例,通过这个接口可以去订阅服务
    NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
    // 这里获得了NamingService实例所订阅的服务列表
    subscribe = namingService.getSubscribeServices();
}

Суммировать

  • Установите и запустите Nacos согласно официальной документации.
  • Практикуйте обнаружение услуг Nacos, связывайте поставщиков услуг и потребителей услуг черезspring cloud alibaba nacos discoveryМодуль + конфигурация зарегистрированы на запущенном сервере Nacos и могут звонить друг другу с балансировкой нагрузки.
  • Nacos Discovery создаст экземпляр NamingService локально для службы, а конечная точка Nacos Discovery задаетсяspring boot actuatorРеализовано, реализована функция получения информации о конфигурации сервиса Nacos Discovery и списка сервисов подписки через NamingService

Следующая статьяПопробуйте управление конфигурацией Nacos Config~

Ссылаться на

spring-cloud-alibaba-group.GitHub.IO/GitHub-боится…

woohoo.fornetley.com/this/spring-from…

что cos.IO/this-capable/docs/…