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-боится…