• SCA Nacos 服务注册和配置中心(二)


    1、Nacos Server 数据持久化

      Nacos 默认使用嵌入式数据库进行数据存储,它支持改为外部Mysql存储。(修改的是Nacos配置文件)

    • 新建数据库 nacos_config,数据库初始化脚本文件${nacoshome}/conf/nacos-mysql.sql
    • 修改${nacoshome}/conf/application.properties,增加Mysql数据源配置

      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&au
      toReconnect=true
      db.user=root
      db.password=123456

    2、Nacos Server 集群

    (1)安装3个或3个以上的Nacos,复制解压后的nacos文件夹,分别命名为nacos-01、nacos-02、nacos-03

    (2)修改配置文件

    • 同一台机器模拟,将上述三个文件夹中application.properties中的server.port分别改为 8848、8849、8850,同时给当前实例节点绑定ip,因为服务器可能绑定多个ip

      nacos.inetutils.ip-address=127.0.0.1

    • 复制一份conf/cluster.conf.example文件,命名为cluster.conf在配置文件中设置集群中每一个节点的信息

      # 集群节点配置
      127.0.0.1:8848
      127.0.0.1:8849
      127.0.0.1:8850

    • 分别启动每⼀个实例(可以批处理脚本完成)

      sh startup.sh -m cluster

    3、Nacos 配置中心

    之前:Spring Cloud Config + Bus

    • Github 上添加配置文件
    • 创建Config Server 配置中心—>从Github上去下载配置信息
    • 具体的微服务(最终使用配置信息的)中配置Config Client—> ConfigServer获取配置信息

    有Nacos之后,分布式配置就简单很多

            Github不需要了(配置信息直接配置在Nacos server中),Bus也不需要了(依然可以完成动态刷新)。 

      接下来

    1. 去Nacos server中添加配置信息
    2. 改造具体的微服务,使其成为Nacos Config Client,能够从Nacos Server中获取到配置信息

    Nacos server 添加配置集

      Nacos 服务端已经搭建完毕,那么我们可以在我们的微服务中开启 Nacos 配置管理 

    (1)添加依赖

    1. <dependency>
    2. <groupId>com.alibaba.cloudgroupId>
    3. <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    4. dependency>

    (2)微服务中如何锁定 Nacos Server 中的配置文件(dataId)

            通过 Namespace + Group + dataId 来锁定配置⽂件,Namespace不指定就默认public,Group不指定就默认 DEFAULT_GROUP。

    dataId 的完整格式如下

    ${prefix}-${spring.profile.active}.${file-extension}

    • prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix 来配置。
    • spring.profile.active 即为当前环境对应的 profile。 注意:当spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
    • file-exetension 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。目前只支持properties 和 yaml 类型。

    spring:

            cloud:
                    nacos:
                            discovery:

                                    # 集群中各节点信息都配置在这⾥(域名-VIP-绑定映射到各个实例的地址信息)
                                    server-addr: 127.0.0.1:8848
                            config:
                                    server-addr: 127.0.0.1:8848
                                    namespace: f965f7e4-7294-40cf-825c-ef363c269d37
                                    group: DEFAULT_GROUP
                                    file-extension: yaml

    (3)通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新

    1. package com.lagou.edu.controller;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.cloud.context.config.annotation.RefreshScope;
    4. import org.springframework.web.bind.annotation.GetMapping;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.RestController;
    7. /**
    8. * 该类用于模拟,我们要使用共享的那些配置信息做一些事情
    9. */
    10. @RestController
    11. @RequestMapping("/config")
    12. @RefreshScope
    13. public class ConfigController {
    14. // 和取本地配置信息一样
    15. @Value("${lagou.message}")
    16. private String lagouMessage;
    17. @Value("${mysql.url}")
    18. private String mysqlUrl;
    19. @Value("${abc.test}")
    20. private String abctest;
    21. @Value("${def.test}")
    22. private String deftest;
    23. @Value("${java.first}")
    24. private String javafirst;
    25. // 内存级别的配置信息
    26. // 数据库,redis配置信息
    27. @GetMapping("/viewconfig")
    28. public String viewconfig() {
    29. return "lagouMessage==>" + lagouMessage + " mysqlUrl=>" + mysqlUrl
    30. + " abctest=>" + abctest + " deftest=>" + deftest + " javafirst=>" + javafirst;
    31. }
    32. }

    注意:上述代码获取的是我们在Nacos中自己定义的配置文件(这里省略配置文件)

            思考:一个微服务希望从配置中心Nacos server中获取多个dataId的配置信息,可以的,扩展多个dataId。

    1. server:
    2. port: 8083
    3. spring:
    4. application:
    5. name: lagou-service-resume
    6. # nacos配置
    7. cloud:
    8. nacos:
    9. discovery:
    10. # 集群中各节点信息都配置在这里(域名-VIP-绑定映射到各个实例的地址信息)
    11. server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
    12. # nacos config 配置
    13. config:
    14. server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
    15. # 锁定server端的配置文件(读取它的配置项)
    16. namespace: 07137f0a-bf66-424b-b910-20ece612395a # 命名空间id
    17. group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
    18. file-extension: yaml #默认properties
    19. # 根据规则拼接出来的dataId效果:lagou-service-resume.yaml
    20. ext-config[0]:
    21. data-id: abc.yaml # 在Nacos中定义的配置文件名
    22. group: DEFAULT_GROUP
    23. refresh: true #开启扩展dataId的动态刷新
    24. ext-config[1]:
    25. data-id: def.yaml
    26. group: DEFAULT_GROUP
    27. refresh: true #开启扩展dataId的动态刷新

    优先级:根据规则生成的dataId > 扩展的dataId(对于扩展的dataId,[n] n越大优先级越高)

  • 相关阅读:
    使用甘特图来做时间管理
    MySQL JDBC编程
    【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据 II 将pod数据传递给容器
    【LeetCode】省份数量(并查集)
    【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
    Python(4)类型转换
    antd+ Umi使用中出现的问题集合(一)
    uva1344
    记一次 .NET 某娱乐聊天流平台 CPU 爆高分析
    工业控制系统面临的安全问题分析
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/126661512