
 
目录
- 概述
 - 下载安装
 
- Nacos服务注册中心
 - 原理
 - 配置服务提供者
 - 配置服务消费者
 - 负载均衡
 
- Nacos服务配置中心
 - 新建一个配置中心服务
 - Nacos控制台配置
 - 历史配置回滚
 
- Nacos数据模型三元组
 - 是什么
 - 默认值
 - Service就是微服务
 - Nacos图形界面
 - 三种方案加载配置
 - DataId方案
 - Group方案
 - Namespace方案
 
- 文献参考
 
概述
Nacos(官方网站:nacos.io)是一个易于使用的平台,专为动态服务发现、配置和服务管理而设计。帮助您轻松构建云原生应用和微服务平台。
Nacos是 Dynamic Naming and Configuration Service 的首字母简称。
 
 Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,因此与其他注册中心关系如下:
 Nacos = Eurake+Config+Bus
 Nacos = Spring Cloud Consul
Nacos与其他注册中心就比较
 
 技术选型的话,根据实际情况来定。
下载安装
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要配置 Maven环境,请确保是在以下版本环境中安装使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
 64 bit JDK 1.8+;
 Maven 3.2.x+;
具体启动方式参考 Nacos 官网。
Nacos Server 启动成功之后,浏览器地址栏输入 http://ip:8848/nacos 查看 Nacos 控制台(默认账号名和密码为 nacos/nacos):
 
 关于更多的 Nacos Server 版本,可以从 Nacos 官方 release 页面查看。
Nacos服务注册中心
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
原理
spring-cloud-starter-alibaba-nacos-discovery 遵循了 Spring Cloud Common 标准,实现了 AutoServiceRegistration、ServiceRegistry、Registration 这三个接口。
在 Spring Cloud 应用的启动阶段,监听了 WebServerInitializedEvent 事件,当 Web 容器初始化完成后,即收到 WebServerInitializedEvent 事件后,会触发注册的动作,调用 ServiceRegistry 的 register 方法,将服务注册到 Nacos Server。
配置服务提供者
从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上
 1、添加依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
 
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
2、在 application.yml 中配置 Nacos server 的地址
server:
  port: 9001
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
 
3、 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class Main9001
{
    public static void main(String[] args)
    {
        SpringApplication.run(Main9001.class,args);
    }
}
 
 
业务类
@RestController
public class PayAlibabaController
{
    @Value("${server.port}")
    private String serverPort;
    @GetMapping(value = "/pay/nacos/{id}")
    public String getPayInfo(@PathVariable("id") Integer id)
    {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}
 

配置服务消费者
从而服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。
 1、添加依赖
<!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--loadbalancer-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
 

2、配置yml
server:
  port: 83
spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
#消费者将要去访问的微服务名称(nacos微服务提供者叫什么你写什么)
service-url:
  nacos-user-service: http://nacos-payment-provider
 
3、 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
@EnableDiscoveryClient
@SpringBootApplication
public class Main83
{
    public static void main(String[] args)
    {
        SpringApplication.run(Main83.class,args);
    }
}
 
配置类
@Configuration
public class RestTemplateConfig
{
    @Bean
    @LoadBalanced //赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate()
    {
        return new RestTemplate();
    }
}
 
业务类
@RestController
public class OrderNacosController
{
    @Resource
    private RestTemplate restTemplate;
    @Value("${service-url.nacos-user-service}")
    private String serverURL;
    @GetMapping("/consumer/pay/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Integer id)
    {
        String result = restTemplate.getForObject(serverURL + "/pay/nacos/" + id, String.class);
        return result+"\t"+"    我是OrderNacosController83调用者。。。。。。";
    }
}
 

负载均衡
在之前LoadBalanced讲到过,是具备负载均衡能力的,因此,服务提供者+1,可以来试试Nacos+LoadBalanced的威力
在IDEA拷贝虚拟端口映射,偷个懒,不CV了
 
 -DServer.port=9002
 
 
 
测试,输入http://localhost:83/consumer/pay/nacos/14,看到9001/9002交替出现,负载均衡成功
Nacos服务配置中心
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更
新建一个配置中心服务
1、添加依赖
<!--bootstrap-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
 
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
2、添加bootstrap.yml
# nacos配置
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml
 
 
3、添加application.yml
server:
  port: 3377
spring:
  profiles:
    active: dev # 表示开发环境
       #active: prod # 表示生产环境
       #active: test # 表示测试环境
 
4、主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClient3377
{
    public static void main(String[] args)
    {
        SpringApplication.run(NacosConfigClient3377.class,args);
    }
}
 
 
5、业务类
 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class NacosConfigClientController
{
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
 
Nacos控制台配置
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
 
- prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
 - spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
 - file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

 
按照上面案例来说,dataId就是【nacos-config-client-dev.yaml】

 
 测试
 1、启动配置中心服务,调用接口http://localhost:3377/config/info查看当先配置信息。
 2、改动Nacos刚创建的yaml配置,重新调用接口,会发现接口返回的配置信息与控制台修改的配置一致,成功
历史配置回滚
上一步修改了Nacos控制台的yaml配置,在这里可以看到历史记录,也可以选择右侧的按钮进行回滚
 
Nacos数据模型三元组
三元组指的是Namespace、Group、DataId,用来作为配置隔离的。
 
是什么
类似Java里面的package名和类名,最外层的Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象
默认值
默认情况:Namespace=public,Group=DEFAULT_GROUP
 Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务
一个Service可以包含一个或者多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。见下一节:服务领域模型-补充说明

Nacos图形界面

 
三种方案加载配置
制定颗粒度,按照隔离的颗粒度优先级从Nacos拉取配置更新项目配置
 spring-cloud-starter-alibaba-nacos-config 在加载服务配置时:
不仅仅加载了以 dataId 为 s p r i n g . a p p l i c a t i o n . n a m e . {spring.application.name}. spring.application.name.{file-extension:properties } 为前缀的基础配置,
还加载了 dataId 为 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name−{profile}.${file-extension:properties } 的基础配置。
在日常开发中如果遇到多套环境下的不同配置,可以通过 Spring 提供的 ${spring.profiles.active} 这个配置项选择不同情况下的配置。
DataId方案
这种方案在上面将配置中心的时候已经举例过,关键字搜索【dataId就是【nacos-config-client-dev.yaml】】
在Nacos控制台再新建一个配置文件叫做 nacos-config-client-test.yaml(里面内容可自行修改),可以在端口3377项目,修改application.yml配置文件,切换test环境
spring:
  profiles:
      #active: dev # 表示开发环境
       #active: prod # 表示生产环境
     active: test # 表示测试环境
 
重启3377项目,再调用接口http://localhost:3377/config/info,可查看最新配置信息是从Nacos拉取的test配置文件
Group方案
Nacos控制台新建Group分组,新建nacos-config-client-prod.yaml配置文件
利用Group实现环境区分
 
 
 修改bootstrap.yml文件
 
 修改application.yml文件
 
 重启3377项目,访问http://localhost:3377/config/info,可查看最新配置信息是从Nacos拉取的prod配置文件
Namespace方案
创建多个Namespace
 
 不填的话会自动生成命名空间id
 


选中Prod_Namespace新建配置
 
 

 
 修改bootstrap.yml文件
 
 修改application.yml文件
 
 重启3377项目,访问http://localhost:3377/config/info,可查看最新配置信息是从Nacos拉取的prod配置文件
文献参考
Nacos中文文档:https://sca.aliyun.com/docs/2023/user-guide/nacos/overview/?spm=5176.29160081.0.0.74801a152Cfdp0
 Nacos官网:https://nacos.io/docs/latest/quickstart/quick-start/
 Nacos Github:https://github.com/alibaba/Nacos
 Spring Cloud Alibaba Github:https://github.com/alibaba/spring-cloud-alibaba
 
     
      
       
        
        
          就先说到这 
         
        
       
      
        \color{#008B8B}{ 就先说到这} 
       
      
    就先说到这
  
     
      
       
        
         
         
           在下 
          
         
           A 
          
         
           p 
          
         
           o 
          
         
           l 
          
         
           l 
          
         
           o 
          
         
        
       
      
        \color{#008B8B}{在下Apollo} 
       
      
    在下Apollo
  
     
      
       
        
         
         
           一个爱分享 
          
         
           J 
          
         
           a 
          
         
           v 
          
         
           a 
          
         
           、生活的小人物, 
          
         
        
       
      
        \color{#008B8B}{一个爱分享Java、生活的小人物,} 
       
      
    一个爱分享Java、生活的小人物,
  
     
      
       
        
        
          咱们来日方长,有缘江湖再见,告辞! 
         
        
       
      
        \color{#008B8B}{咱们来日方长,有缘江湖再见,告辞!} 
       
      
    咱们来日方长,有缘江湖再见,告辞!




















