• nacos2-配置中心


    Nacos之服务配置中心

    pom

     
         com.alibaba.cloud  
         spring-cloud-starter-alibaba-nacos-config  
    
    
    • 1
    • 2
    • 3
    • 4

    YML
    ​ 要注意的是这里我们要配置两个,因为Nacos同SpringCloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
    ​ springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
    ​ 分别要配置的是,这里bootstrap.yml配置好了以后,作用是两个,第一个让3377这个服务注册到Nacos中,第二个作用就是去Nacos中去读取指定后缀为yaml的配置文件:
    bootstrap.yml

    # nacos配置
    server:
      port: 3377
    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #Nacos服务注册中心地址
          config:
            server-addr: localhost:8848 #Nacos作为配置中心地址
            file-extension: yaml #指定yaml格式的配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    application.yml

    spring:
      profiles:
        active: dev # 表示开发环境
    
    • 1
    • 2
    • 3

    demo

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CloudalibabaConfig3377Application {
        public static void main(String[] args) {
            SpringApplication.run(CloudalibabaConfig3377Application.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    业务类:
    这里的@RefreshScope实现配置自动更新,意思为如果想要使配置文件中的配置修改后不用重启项目即生效,可以使用@RefreshScope配置来实现

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RefreshScope //支持Nacos的动态刷新功能
    public class ConfigClientController {
        @Value("${config.info}")
        private String configInfo;
        @GetMapping("/config/info")
        public String getConfigInfo(){
            return configInfo;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Nacos配置规则

    ​ 在 Nacos Spring Cloud 中,dataId 的完整格式如下(详情可以参考官网 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html):

    ${prefix}-${spring.profiles.active}.${file-extension}
    1. `prefix` 默认为 `spring.application.name` 的值,也可以通过配置项 `spring.cloud.nacos.config.prefix`来配置。
    2. `spring.profiles.active` 即为当前环境对应的 profile,注意:**当 `spring.profiles.active` 为空时,对应的连接符 `-` 也将不存在,dataId 的拼接格式变成 `${prefix}.${file-extension}`**(不能删除)
    3. `file-exetension` 为配置内容的数据格式,可以通过配置项 `spring.cloud.nacos.config.file-extension` 来配置。目前只支持 `properties` 和 `yaml` 类型。
    4. 通过 Spring Cloud 原生注解 `@RefreshScope` 实现配置自动更新:
    5. 所以根据官方给出的规则我们最终需要在Nacos配置中心添加的配置文件的名字规则和名字为:
    6. # ${spring.application.name}-${spring.profiles.active}.${file-extension}
    # nacos-config-client-dev.yaml
    # 微服务名称-当前环境-文件格式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Nacos平台创建配置操作
    首页->配置管理->配置列表-> + ->Data ID,Group,yaml,内容:

    config: 
        info: nacos config center,version = 1
    
    • 1
    • 2

    测试:
    启动服务访问服务来测试(没有修改之前是1,修改之后不需要重启项目既可以直接获取最新配置):http://localhost:3377/config/info

    Nacos命名空间分组和DataID三者关系

    名词解释

    命名空间(Namespace)
    ​ 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
    配置分组(Group)
    ​ Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
    配置集 ID(Data ID)
    ​ Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
    ​ 配置集:一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

    三者关系

    ​ 这三者的关系类似于Java里面的package名和类名,最外层的Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
    默认情况
    Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
    具体情况
    ​ Nacos默认的命名空间是public,我们就可以利用Namespace来实现隔离,比如我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
    ​ Group本身就是分组的意思,它可以把不同的微服务划分到同一个分组里面去。
    ​ 剩下的就是具体微服务,一个Service可以包含多个Cluster,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比如说,将一个Service部署在北京和和杭州的机房中,北京机房的Service就可以起名为(BJ),杭州机房中的Service就可以起名为(HZ),这样就可以尽量让同一个机房的微服务互相调用,提升性能。

    Nacos支持三种部署模式

    1. 单机模式 - 用于测试和单机试用
    2. 集群模式 - 用于生产环境,确保高可用
    3. 多集群模式 - 用于多数据中心场景
    默认Nacos使用嵌入式数据库实现数据的存储,所以,如果启动多个默认配置下的Nacos节点,数据储存存在一致性问题,为了解决这个问题,
    Nacos采用了集中存储方式来支持集群化部署,目前仅支持MySql的存储。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    Nacos持久化配置

    ​ Nacos默认自带嵌入式数据库derby,所以我们每次创建一个Nacos实例就会有一个derby,当有多个Nacos节点的时候,就会出现一致性问题,所以Nacos支持了外部数据库统一数据管理MySql。

    Nacos默认derby切换MySql

    具体配置方式可以参考官网:https://nacos.io/zh-cn/docs/deployment.html
    1.我们需要找到Nacos安装目录下的conf目录中的Sql脚本nacos-mysql.sql,然后在数据库中进行执行
    注意:需要我们先创建好数据库并且使用:

    CREATE DATABASE nacos_config;
    USE nacos_config;
    
    • 1
    • 2

    2.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
    db.user=root
    db.password=root
    #注意:这里需要注意几个点,一个是url地址需要改,另外数据库的用户和密码也需要更改,同时还有一个是官网上在db.url.0=jdbc:mysql这个属性上少了一个属性为serverTimezone=UTC需要我们手动添加
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Linux版Nacos+MySql生产环境配置

    1.在官网上下载NacosLinux版本:https://github.com/alibaba/nacos/releases
    2.在Linux系统中解压此文件,并且把其中nacos目录拷贝到nacos目录中

    tar -zxvf nacos-server-2.0.3.tar.gz
    
    • 1

    3.打开nacos目录下的bin目录输入命令即可执行 ./startup.sh
    我们现在知道,想要启动Naocs只需要启动startup.sh命令即可,但是如果启动3个Nacos那?所以如果我们需要启动多个Nacos,其实Nacos本身默认启动就是集群模式。
    注意点:如果是linux虚拟机,需要分配至少4g以上内存
    nginx配置

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    stream {
          upstream nacos {
            server 192.168.189.129:8848;
            server 192.168.189.129:8868;
            server 192.168.189.129:8888;
          }
         server {
            listen  81;
            proxy_pass nacos;
         }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    配置微服务为Linux版Nacos集群并注册进Nacos

    1. 我们以9002为例,此时我们要修改application.yaml文件,把之前的Nacos端口换成Nacos集群
    server:
      port: 9002
    spring:
      application:
        name: nacos-provider
      cloud:
        nacos:
          discovery:
            # server-addr: localhost:8848
            # 换成nginx的81端口,做集群
            server-addr: http://192.168.189.129:81
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    面试题:分布式锁用了 Redis 的什么数据结构
    人口增长(c++题解)
    MKS 质量MFC流量控制器原理及应用课件PPT
    HTML期末大作业——游戏介绍(HTML+CSS+JavaScript) web前端开发技术 web课程设计网页规划与设计 Web大学生网页成品
    一行行的代码解密马尔可夫链
    Python实现微博舆情分析的设计与实现
    C++ string常用函数用法总结
    力扣(leetcode)第485题最大连续1的个数(Python)
    [HNCTF 2022 Week1]——Web方向 详细Writeup
    leetcode 343 整数拆分
  • 原文地址:https://blog.csdn.net/m0_37987631/article/details/127894965