zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba Nacos配置中心与服务发现

    黑马程序员,视频地址:https://www.bilibili.com/video/BV1VJ411X7xX?p=1

    1. Nacos简介

      Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。

      官方介绍是这样的:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务 发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。

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

    1.1 Nacos特性

      Nacos主要提供以下四大功能:

      1. 服务发现与服务健康检查:Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防 止向不健康的主机或服务实例发送请求。

      2. 动态配置管理:动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新 部署应用程序,这使配置的更改更加高效和灵活。

      3. 动态DNS服务:Nacos提供基于DNS 协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以 域名的方式暴露端点,让三方应用方便的查阅及发现。

      4. 服务和元数据管理:Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周 期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。

    2 Nacos安装

    2.1 安装环境准备

      Nacos依赖Java 环境来运行。如果你是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

      1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。

      2. 64 bit JDK 1.8+

      3. Maven 3.2.x+

    2.2 下载安装包 

      安装Nacos有2种方式:1.下载源码后自己编译源码并安装;2.下载安装包

      我们选择安装包,下载地址:https://github.com/alibaba/nacos/releases

      当前最新安装包版本是2.0.0,下载后的文件名:nacos-server-2.0.0.zip 或者 nacos-server-2.0.0.tar.gz,并解压安装包,我们把解压后的文件目录成为nacoshome。

    2.3 启动前准备工作

    (1)使用mysql创建一个数据库,数据库名称 nacos_config,并执行 ${nacoshome}conf acos-mysql.sql 这个脚本,初始化Nacos运行时所需数据表。

    (2)修改 ${nacoshome}confapplication.properties配置,把数据库参数填写正确。

    ### If use MySQL as datasource:
    spring.datasource.platform=mysql
    
    ### Count of DB:
    db.num=1
    
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=nacos
    db.password.0=nacos

    2.4 启动Nacos Server

      windows系统的启动文件:${nacoshome}instartup.cmd

      linux系统的系统文件:sh ${nacoshome}instartup.sh  -m standalone  (standalone代表着单机模式运行,非集群模式)

      启动成功后,会打印日志:2021-03-25 16:21:14,360 INFO Nacos started successfully in cluster mode. use external storage

      登录地址:http://127.0.0.1:8848/nacos   (IP要换成自己的服务器IP,端口默认是8848)

      默认登录名密码 nacos / nacos

      登录成功后的页面如下:

    2.5 配置测试

      启动nacos成功后,可通过nacos提供的http api验证nacos服务运行是否正常,

      我们使用Postman发送POST请求:http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld  返回结果:true

      表示此条属性已经新增成功,在 配置管理--配置列表 页面,我们就可以查询到nacos.cfg.dataId这条数据了,并点击详情可以查看配置内容。

      使用Postman发送GET请求:http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test     也会返回结果HelloWorld

      

    3. 配置管理

    3.1 基础概念

      对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。

      配置集(Data ID):在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的ID即DataID。

      配置项:配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

      配置分组(Group):配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。

      命名空间(Namespace):命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group) 或 配置集。

      Nacos抽象定义了Namespace、Group、Data ID的概念,具体这几个概念代表什么,取决于我们把它们看成什么,这里推荐给大家一种用法:

      Namespace:代表不同环境,如开发、测试、生产环境。

      Group:代表某项目,如XX医疗项目、XX电商项目

      DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件

    3.2 命名空间

      在管理后台-命名空间页面,可以新建、编辑、删除命名空间,我这里按照开发环境、测试环境创建了2个。

      如果Nacos是多个项目组公用的,也可以根据创建更细致的命名空间,便于区分。

    3.3 配置管理

      在配置管理--配置列表页面,我们可以新建、编辑、删除、导入、导出配置文件。

      创建配置时,data_id, group 都只支持英文字母和数据,特殊字符只允许有一下四种:'_', '-', '.', ':'

      红框部分是我刚创建的命名空间,可以点击进行切换。

     3.4 历史版本

      在配置管理-历史版本页面,记录着之前被修改的配置文件的历史版本。

      刚进入历史版本页面是空白的,需要你输入正确的Data ID和Group查询,当看到你需要的历史版本时,可以查看之前的详情,并选择回退。

     3.5 监听查询

      当有应用连接到Nacos时,输入Data ID和Group可以查询到连接应用的IP

    3.6 应用配置

    3.6.1 项目基础配置  

    当在Java应用中使用Nacos配置中时,首先要进入jar包。因为我使用的是2.0版的Nacos,特意把nacos-client换成了2.0版

           <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>2.1.3.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.alibaba.nacos</groupId>
                        <artifactId>nacos-client</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>2.0.0</version>
            </dependency>

      然后在bootstrap.yml 文件中加入如下配置:

      如果项目中同时有多个配置文件,比如:application.yml和bootstrap.yml。其中boostrap.yml的加载优先级是最高的。所以读取配置中心参数的信息,一般都要写在bootstrap里。

    spring:
      cloud:
          nacos:
            config:
              # 配置中心地址
              server-addr: 127.0.0.1:8848
              # dataId = application.name +  file-extension
              file-extension: yaml
              namespace: df43bed9-724e-40a2-8528-4c1be8719510
              group: DEFAULT_GROUP

      server-addr 配置中心地址。

      file-extension文件后缀。配置集(dataId) 的内容,应该等于应用名称+file-extension。如果你的dataId没有后缀,这一项可以不写。

      namespace:命名空间的ID

      group:所属分组名称

    3.6.2 属性动态刷新

      在Spring项目中,代码里读取配置文件一般都使用@Value注解,如下:

        @Value("${common.name}")
        private String config;

      但是,使用Nacos配置中心后,如果在配置中心修改了属性值,在项目未重启的情况下,是不会自动更新的,因为@Value注解是不会自动刷新它的值的。

      我们需要使用注入ConfigurableApplicationContext,这是配置的上下文,使用它的getProperty的方法动态获取属性值。在Nacos修改属性值时,ConfigurableApplicationContext会进行刷新的。

        @Autowired
        private ConfigurableApplicationContext applicationContext;
    
        public String getConfig1() {
            return applicationContext.getEnvironment().getProperty("common.name");
        }

    3.6.3 多配置文件

      如果项目比较复杂,是需要同时引用多个配置文件的,一般来说项目的主配置文件还是使用file-extension标签,外部引用的配置文件使用extension-configs标签。

      在yaml文件里的写法。注意:多个配置文件需要在同一个namespace里。refresh表示是否需要动态刷新,默认值是false。

    spring:
      application:
        name: server1
      cloud:
          nacos:
            config:
              # 配置中心地址
              server-addr: 127.0.0.1:8848
              # dataId = application.name +  file-extension
              file-extension: yaml
              namespace: df43bed9-724e-40a2-8528-4c1be8719510
              group: DEFAULT_GROUP
              extension-configs:
                - data-id: ext-config.properties
                  group: DEFAULT_GROUP
                  refresh: true
                - data-id: ext-config2.properties
                  group: DEFAULT_GROUP
                  refresh: true

      上面这段配置,一共加载了3个配置文件:server1.yaml,ext-config.properties, ext-config2.properties

      通过内部相关规则(应用名、扩展名 )自动生成相关的 Data Id 配置优先级最高,server1.yaml

      另外引用外部配置文件在properties上的写法是spring.cloud.nacos.config.extension-configs[n].data-id,默认从0开始,这里的n越大,优先级越高。所以在上面例子中应该是 ext-config2.properties优先级高于 ext-config.properties

      优先级的作用,如果多个配置文件中,出现了相同的值,会以优先级高的值为准。

    3.6.4 禁用Nacos配置中心

      通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config 

    4. 服务发现

    5. Nacos集群

    5.1 Nacos集群配置

      为了保证Nacos的高可用,一般需要部署3个或3个以上的Nacos Server实例来组成集群,这样的其中一个台报错,也不会影响Nacos使用。这多个Nacos Server会自动选举出一个Server作为Leader。

      首先,我们2.2节解压的安装包复制成三份,如果是单机演示,需要更改nacos/的conf目录下application.properties中server.port,防止端口冲突。如果是线上环境,建议这三份实例放到不同的服务器上,才能确保高可用。

      在所有nacos目录的conf目录下,有文件 cluster.conf.example ,将其命名为 cluster.conf ,并将每行配置成 ip:port 。(请配置3个或3个以上节点,这里填写实例所属的IP和端口,3个nacos都要配置)

    # ip:port
    127.0.0.1:8848
    127.0.0.1:8849
    127.0.0.1:8850

    5.2 集群启动

      在启动Nacos Server时,需使用-m标签,表示是集群方式启动

    startup ‐m cluster

      启动后,我们可以在管理后台的节点列表里,查看到当前启动的实例,并发现其中一台Server被选举成了Leader。

    5.3 客户端配置

      需要把3个实例的IP和端口都填写到客户端配置文件中。

    spring:
       application:
           name: xxxx
       cloud:
          nacos: 
             config:
                server‐addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850

    5.4 数据库的高可用

      为了保证Nacos的数据库也是高可用,我们可以同时使用2台数据库,实现主备。

    db.num=2
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true
    db.url.1=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true
    db.user=root
    db.password=root
  • 相关阅读:
    FCKEditor使用说明
    如何查看索引或table所佔用的實際空間
    java字节输入流
    文件的读写操作
    利用JProfiler
    javascript面向对象技术基础(五)
    深刻理解Linux进程间通信(IPC)
    JAVA中操作数据库方式与设计模式的应用 2
    javascript面向对象技术基础(六)
    FCKeditor在线编辑器
  • 原文地址:https://www.cnblogs.com/huanshilang/p/14577579.html
Copyright © 2011-2022 走看看