22.Nacos做服务配置中心

1.Nacos作为配置中心-基础配置

先搭建环境:
    1.新建一个项目:cloudAilibaba-config-client
    2.pom文件中引入:下面两个jar包最好捆绑导入
        1:服务注册中心包
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        2.服务配置中心包
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    
    3.新建两个配置文件:1.bootstrap.yml(系统配置文件,优先加载) 2.application.yml(用户的自定义配置文件)
        3.1 bootstrap.yml配置文件中的内容:
            server:
                  port: 3377
                spring:
                  application:
                    name: nacos-config-client3377
                  cloud:
                    nacos:
                      #重点1:服务注册中心的nacos地址
                      discovery:
                        server-addr: 192.168.2.129:8848 #Nacos服务注册中心地址
                      #重点2:服务配置中心的nacos地址
                      config:
                        server-addr: 192.168.2.129:8848 #Nacos服务配置中心地址
                        file-extension: yaml #指定文件后缀
            
           3.2 application.yml中的配置:
               #指定生效的配置文件后缀
               spring:
                  profiles:
                    active: dev
    4. 编写业务逻辑
        @RestController
        //重点1:加上@RefreshScope标签,来自动刷新
        @RefreshScope
        @Slf4j
        public class ConfigController {
            /*
                判断逻辑是:看是否能取到nacos配置中心配置的config.info的值
            */
            @Value("${config.info}")
            private String configInfo;
            @GetMapping("/config/getConfigInfo/{id}")
            public String getConfigInfo(@PathVariable("id") int id){
              log.info("请求路径id:{}",id);
              return configInfo;
            }
        }
    5. 启动类代码:
        @SpringBootApplication
        //重点1:加上该标签,可以让服务注册中心扫描到
        @EnableDiscoveryClient
        public class ConfigClientApplication3377 {
            public static void main(String[] args) {
                    SpringApplication.run(ConfigClientApplication3377.class, args);
                }
        }
    
    6. 在nacos上配置服务配置

nacos的配置列表中的DataId的命名方式为如何呢,这个最重要,需要遵循规则:
参考地址:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

在 Nacos Spring Cloud 中,dataId 的完整格式如下:
    ${prefix}-${spring.profiles.active}.${file-extension}

1.prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
2.spring.profiles.active 即为当前环境对应的 profile(即在application.yml中配置的spring.profiles.active)
    注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
   不过:尽量不为空,因为为空会有很多想不到的问题!!!
3.file-exetension 为配置内容的数据格式,
    可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。
    目前只支持 properties 和 yaml 类型。

示例看下图:

nacos-config-client3377-dev.yaml中的配置如下:
    config: 
        info: nacos config info version:吴孟达
测试,访问:http://localhost:3377/config/getConfigInfo/3
可以正常取到

如何实现动态刷新呢?
    nacos上的配置改了后,不需要发送post请求,客户端直接就更改了!!

2.Nacos作为配置中心-分类配置.

1.nameSpace可以用来区分部署环境
2.Group和DataId逻辑上区分两个目标对象

默认情况下,NmaeSpace=public ,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
1.Nacos默认的命名空间是public,Namespace主要是用来实现隔离:
    比如我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个NameSpace,不同的NameSpace之间是隔离的
    
2.Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。

3.Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认Cluster是Default,Cluster是对指定微服务的一个虚拟划分
    比方说为了容灾,将service微服务分别部署在杭州机房和广州机房,
    这时可以给杭州机房的service服务器起一个集群名称(HZ)
    给广州机房的service微服务起一个集群名称(GZ),还可以尽量让同一机房的微服务互相调用,以提升性能。

4.最后的是Instance,就是微服务实例

3.Nacos集群和持久化配置(重要)

默认Nacos使用嵌入式数据库(Nacos自带的)实现数据的存储。所以,如果取启动多个默认配置下的Nacos节点(集群部署),数据的一致性很难保证。
为了解决这一问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持mysql的存储。(即采用mysql数据库作为Nacos集群的数据统一)



Nacos支持三种部署模式:
    1.单机模式-用于测试和单机试用
    2.集群模式-用于生产环境,确保高可用
    3.多集群模式-用于多数据中心场景
Nacos内部内嵌了一个数据库:derby,每个nacos都会带一个,导致多节点nacos无法达到数据共享问题~~nacos的pom文件依赖如下
集群部署参考地址:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
集群配置需要ngix:未作

 

posted @ 2022-05-29 17:54  努力的达子  阅读(89)  评论(0编辑  收藏  举报