Spring Cloud Alibaba学习笔记: 3、Nacos - 服务注册与发现

﹏ヽ暗。殇╰゛Y 2021-12-17 03:27 402阅读 0赞

文章目录

      • Nacos概览
      • 什么是 Nacos?
      • Nacos 概念
      • Nacos 架构
        • 基本架构及概念
          • 服务 (Service)
          • 服务注册中心 (Service Registry)
          • 服务元数据 (Service Metadata)
          • 服务提供方 (Service Provider)
          • 服务消费方 (Service Consumer)
          • 配置 (Configuration)
          • 配置管理 (Configuration Management)
          • 名字服务 (Naming Service)
          • 配置服务 (Configuration Service)
      • 安装Nacos
          • 1、下载服务
          • 2、启动服务器
          • 3、访问服务
      • 接入 Nacos 注册中心
        • 服务提供者
        • 服务消费者

Nacos概览

Nacos 官网地址: https://nacos.io

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

什么是 Nacos?

https://nacos.io/zh-cn/docs/what-is-nacos.html

Nacos 概念

https://nacos.io/zh-cn/docs/concepts.html

NOTE: Nacos 引入了一些基本的概念,系统性的了解一下这些概念可以帮助您更好的理解和正确的使用 Nacos 产品。

Nacos 架构

基本架构及概念

在这里插入图片描述

服务 (Service)

服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.

服务注册中心 (Service Registry)

服务注册中心,它是服务,其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

服务元数据 (Service Metadata)

服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据

服务提供方 (Service Provider)

是指提供可复用和可调用服务的应用方

服务消费方 (Service Consumer)

是指会发起对某个服务调用的应用方

配置 (Configuration)

在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

配置管理 (Configuration Management)

在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

名字服务 (Naming Service)

提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。

配置服务 (Configuration Service)

在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

更多…

安装Nacos

注: 本文采用 Nacos Docker 方式启动

1、下载服务
  1. 下载地址:https://github.com/alibaba/nacos/releases
2、启动服务器
  • Linux/Unix/Mac
    启动命令(standalone代表着单机模式运行,非集群模式):

    sh startup.sh -m standalone

  • Windows
    启动命令:

    cmd startup.cmd

或者双击startup.cmd运行文件

  • Docker

1 、Clone 项目

  1. git clone https://github.com/nacos-group/nacos-docker.git
  2. cd nacos-docker

在这里插入图片描述

2、单机模式

  1. docker-compose -f example/standalone.yaml up

在这里插入图片描述

3、访问服务

启动完成之后,访问:http://127.0.0.1:8848/nacos/
可以进入Nacos的服务管理页面,
:从 0.8.0 版本开始,需要登录才可访问,nacos 默认用户名密码 nacos/nacos
在这里插入图片描述

接入 Nacos 注册中心

服务提供者

1、 创建一个maven module 项目 sca-nacos-discovery-provider

2、 pom.xml 配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>cn.fxbin.learn</groupId>
  7. <artifactId>sca</artifactId>
  8. <version>1.0</version>
  9. </parent>
  10. <artifactId>sca-nacos-discovery-provider</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <name>sca-nacos-discovery-provider</name>
  13. <description>Spring Cloud Alibaba Nacos Discovery Provider Service Project</description>
  14. <properties>
  15. <java.version>1.8</java.version>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-web</artifactId>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  25. </dependency>
  26. </dependencies>
  27. <build>
  28. <plugins>
  29. <plugin>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-maven-plugin</artifactId>
  32. </plugin>
  33. </plugins>
  34. </build>
  35. </project>

3、创建应用主类别 ScaNacosDiscoveryProviderApplication.java

  1. package cn.fxbin.learn.sca.nacos.provider;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.RestController;
  8. @EnableDiscoveryClient
  9. @SpringBootApplication
  10. public class ScaNacosDiscoveryProviderApplication {
  11. public static void main(String[] args) {
  12. SpringApplication.run(ScaNacosDiscoveryProviderApplication.class, args);
  13. }
  14. @RestController
  15. public class EchoController {
  16. @GetMapping(value = "/echo/{message}")
  17. public String echo(@PathVariable String message) {
  18. return "Hello Nacos Discovery Provider : " + message;
  19. }
  20. }
  21. }

4、 配置服务端口、名称、服务端点检查和Nacos地址

  1. server:
  2. port: 9090
  3. management:
  4. endpoints:
  5. web:
  6. exposure:
  7. include: "*"
  8. spring:
  9. application:
  10. name: sca-nacos-discovery-provider
  11. cloud:
  12. nacos:
  13. discovery:
  14. server-addr: 127.0.0.1:8848

5、启动服务提供者

验证服务端点检查 :

spring-cloud-starter-alibaba-nacos-discovery 在实现的时候提供了一个 EndPoint, EndPoint 的访问地址为 http://ip:port/actuator/nacos-discovery。 EndPoint 的信息主要提供了两类:

1、subscribe: 显示了当前有哪些服务订阅者
2、NacosDiscoveryProperties: 显示了当前服务实例关于 Nacos 的基础配置

如下图所示:
在这里插入图片描述

验证注册列表:

启动完成之后,在 Nacos Server 控制台可以看到如下内容 :

在这里插入图片描述
在这里插入图片描述

服务消费者

1、 创建一个maven module 项目 sca-nacos-discovery-consumer

2、 pom.xml 配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>sca</artifactId>
  7. <groupId>cn.fxbin.learn</groupId>
  8. <version>1.0</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>sca-nacos-discovery-consumer</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>sca-nacos-discovery-provider</name>
  14. <description>Spring Cloud Alibaba Nacos Discovery Consumer Service Project</description>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.cloud</groupId>
  25. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  26. </dependency>
  27. </dependencies>
  28. <build>
  29. <plugins>
  30. <plugin>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-maven-plugin</artifactId>
  33. </plugin>
  34. </plugins>
  35. </build>
  36. </project>

3、创建应用主类别 ScaNacosDiscoveryConsumerApplication.java

  1. package cn.fxbin.learn.sca.nacos.consumer;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.cloud.client.ServiceInstance;
  6. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  7. import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.web.bind.annotation.GetMapping;
  10. import org.springframework.web.bind.annotation.PathVariable;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import org.springframework.web.client.RestTemplate;
  13. import javax.annotation.Resource;
  14. @Slf4j
  15. @EnableDiscoveryClient
  16. @SpringBootApplication
  17. public class ScaNacosDiscoveryConsumerApplication {
  18. public static void main(String[] args) {
  19. SpringApplication.run(ScaNacosDiscoveryConsumerApplication.class, args);
  20. }
  21. @Bean
  22. public RestTemplate restTemplate(){
  23. return new RestTemplate();
  24. }
  25. @RestController
  26. public class ConsumerController {
  27. @Resource
  28. LoadBalancerClient loadBalancerClient;
  29. @Resource
  30. private RestTemplate restTemplate;
  31. @GetMapping(value = "/echo/{message}")
  32. public String echo(@PathVariable String message) {
  33. // 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
  34. ServiceInstance serviceInstance = loadBalancerClient.choose("sca-nacos-discovery-provider");
  35. String url = String.format("http://%s:%s/echo/%s", serviceInstance.getHost(), serviceInstance.getPort(), " !^@^! ");
  36. log.info("请求路径为:{}", url);
  37. return restTemplate.getForObject(url, String.class);
  38. }
  39. }
  40. }

4、 配置服务端口、名称、服务端点检查和Nacos地址

  1. server:
  2. port: 9031
  3. management:
  4. endpoints:
  5. web:
  6. exposure:
  7. include: "*"
  8. spring:
  9. application:
  10. name: sca-nacos-discovery-consumer
  11. cloud:
  12. nacos:
  13. discovery:
  14. server-addr: 127.0.0.1:8848

5、启动服务消费者, postman 验证接口:

在这里插入图片描述

在这里插入图片描述

源码地址:
github地址: https://github.com/fxbin/sca
码云地址 : https://gitee.com/fxbin/sca

参考链接:
https://nacos.io
http://www.iocoder.cn/Nacos/good-collection/?vip


end
如有问题,请留言,感谢阅读

发表评论

表情:
评论列表 (有 0 条评论,402人围观)

还没有评论,来说两句吧...

相关阅读