• Spring Cloud Alibaba基础教程-Nacos(二)


    Spring Cloud Alibaba基础教程-Nacos(一)当中学习了,如何从 nacos当中 通过Java的方式获取值,以及连接数据库,下面我们开始第二篇的学习 ,如果对你有帮助,方便下次寻找。 好了这里 我们先来理解几个概念

    1. Nacos 配置管理系统应用

    1.1 Nacos的配置管理模型

    对于 Nacos的配置 管理 ,可以通过 NamespacegroupData ID 来定位一个配置集 ,下面这幅图 就是 (Nacos data model)数据模型

    在这里插入图片描述
    Nacos 提供了四层的数据逻辑隔离模型,用户账号对应的可能是一个企业或者独立的个体,这个数据一般情况下不会传到服务注册中心。一个用户账号可以新建多个命名空间,每个命名空间对应一个客户端实例,这个命名空间对应的注册中心物理集群是可以根据规则进行路由的,这样可以让注册中心内部的升级和迁移对用户是无感知的,同时可以根据用户的级别,为用户提供不同服务级别的物理集群。再往下是服务分组和服务名组成的二维服务标识,可以满足接口级别的服务隔离。

    解析

    公司 (Company)

    这里 指的可以 是 可以是 企业 也可以是独立的个体

    配置集(Data ID)

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

    配置项

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

    配置分组(Group)

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

    命名空间(Namespace)

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

    最佳实践

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

    • Namespace:代表不同环境,如开发、测试、生产环境。
    • Group:代表某项目,如XX医疗项目、XX电商项目
    • DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件

    在这里插入图片描述
    回顾

    步骤 :

    1. nacos服务地址,必须指定
    2. namespace,如不指定默认public
    3. group,如不指定默认 DEFAULT_GROUP 4、dataId,必须指定

    获取某配置集的代码:

    // 初始化配置服务,
    String serverAddr = "127.0.0.1:8848";
    String namespace = "ee356vvx‐d838‐425c‐b261‐029dab26232f"; //开发环境
    String group = "DEFAULT_GROUP"; //默认组
    String dataId = "spiritmark‐simple‐demo.yaml";
    Properties properties = new Properties();
    properties.put("serverAddr", serverAddr);
    properties.put("namespace", namespace);
    ConfigService configService = NacosFactory.createConfigService(properties);
    //获取配置,并输出控制台
    String content = configService.getConfig(dataId, group, 5000);
    System.out.println(content);
    
    

    1.2( 命名空间管理)namespace 隔离设计

    namespace 的设计是 nacos 基于此做多环境以及多租户(多个用户共同使用nacos)数据(配置和服务)隔离的。

    • 从一个租户(用户)的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的namespce,以此来实现多环境的隔离。例如,你可能有开发,测试和生产三个不同的环境,那么使用一套nacos 集群可以分别建以下三个不同的 namespace。如下图所示:
      在这里插入图片描述
    • 从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:
      在这里插入图片描述

    命名空间管理

    前面已经介绍过,命名空间(Namespace)是用于隔离多个环境的(如开发、测试、生产),而每个应用在不同环 境的同一个配置(如数据库数据源)的值是不一样的。因此,我们应针对企业项目实际研发流程、环境进行规划。 如某软件公司拥有开发、测试、生产三套环境,那么我们应该针对这三个环境分别建立三个namespace。
    在这里插入图片描述

    建立好所有namespace后,在配置管理与服务管理模块下所有页面,都会包含用于切换namespace(环境)的tab按 钮,如下图:
    在这里插入图片描述

    如果您在编写程序获取配置集过程中没有感知到这个参数的输入,那么 nacos 统一会使用一个默认的 namespace 作为输入,nacos config 会使用一个空字符串作为默认的参数来初始化,对应界面上就是public命名空间。

    注:

    Note: namesace 为 public 是 nacos 的一个保留空间,如果您需要创建自己的 namespace,不要和 public 重名,以一个实际业务场景有具体语义的名字来命名,以免带来字面上不容易区分自己是哪一个 namespace。 Note:在编写程序获

    取配置集时,指定的namespace参数一定要填写命名空间ID,而不是名称

    // 初始化配置服务,
    String serverAddr = "127.0.0.1:8848";
    String namespace = "ee247dde‐d838‐425c‐b371‐029dab26232f"; //开发环境
    String group = "DEFAULT_GROUP"; //默认组
    String dataId = "spiritmark‐simple‐demo.yaml";
    Properties properties = new Properties();
    properties.put("serverAddr", serverAddr);
    properties.put("namespace", namespace);
    ConfigService configService = NacosFactory.createConfigService(properties);
    //获取配置,并输出控制台
    String content = configService.getConfig(dataId, group, 5000);
    System.out.println(content);
    

    1.3 配置管理

    Nacos支持基于Namespace和Group的配置分组管理,以便用户更灵活的根据自己的需要按照环境或者应用、模块等分组管理微服务的大量配置,在配置管理中主要提供了配置历史版本、回滚、订阅者查询等核心管理能力。

    1.3.1 配置列表

    点击Nacos控制台的 配置管理->配置列表 菜单,即可看到以下界面展示:

    在这里插入图片描述
    界面中展示了不同namespace下的配置集列表,可点击左上角的不同namespace进行切换。
    右上角“+"号或点击某配置集后的 编辑 按钮可进入配置集编辑器。
    多配置格式编辑器
    Nacos支持 YAML、Properties、TEXT、JSON、XML、HTML 等常见配置格式在线编辑、语法高亮、格式校验,帮助用户高效编辑的同时大幅降低格式错误带来的风险。
    Nacos支持配置标签的能力,帮助用户更好、更灵活的做到基于标签的配置分类及管理。同时支持用户对配置及其变更进行描述,方面多人或者跨团队协作管理配置。

    在这里插入图片描述

    编辑DIFF
    Nacos支持编辑DIFF能力,帮助用户校验修改内容,降低改错带来的风险。
    在这里插入图片描述配置集导出

    勾选若干配置集,点击 导出选中的配置 ,可获得一个压缩包:
    在这里插入图片描述

    压缩包内,包含了选中配置集所转换的配置文件:

    在这里插入图片描述
    配置集导入
    点击右上角的 导入配置 ,可选择导出的压缩包文件,将压缩包内的文件恢复为nacos配置集
    在这里插入图片描述

    配置集克隆
    点击左下角 克隆按钮,将会弹出克隆对话框,此功能可用于将配置迁移到其他Namespace。

    1.3.2 历史版本

    Nacos通过提供配置版本管理及其一键回滚能力,帮助用户改错配置的时候能够快速恢复,降低微服务系统在配置 管理上的可用性风险。
    在这里插入图片描述
    点击回滚:
    在这里插入图片描述

    1.3.3 监听查询

    Nacos提供配置订阅者即监听者查询能力,同时提供客户端当前配置的MD5校验值,以便帮助用户更好的检查配 置变更是否推送到 Client 端。

    在这里插入图片描述
    通过以下代码可对某配置进行监听:

    public class SimpleDemoMainListener {
    public static void main(String[] args) throws NacosException {
    //nacos 地址
    String serverAddr = "127.0.0.1:8848";
    //Data Id
    String dataId = "spiritmark‐simple‐demo.yaml";
    //Group
    String group = "DEFAULT_GROUP";
    Properties properties = new Properties();
    properties.put("serverAddr",serverAddr);
    ConfigService configService = NacosFactory.createConfigService(properties);
    //获取配置,String dataId, String group, long timeoutMs
    String content = configService.getConfig(dataId, group, 5000);
    System.out.println(content);
    //添加监听String dataId, String group, Listener listener
    configService.addListener(dataId, group, new Listener() {
    public Executor getExecutor() {
    return null;
    }
    public void receiveConfigInfo(String s) {
    //当配置发生变化时的响应
    System.out.println(s);
    }
    });
    // 测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。 正式代码中无需下面代码
    while (true) {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }
    

    1.4 登录管理

    Nacos当前版本支持简单的登录功能,默认用户名/密码为: nacos/nacos

    修改默认用户名/密码方法

    1. 生成加密密码
      在入门程序中加入如下以来:
    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring‐security‐core</artifactId>
    <version>5.1.4.RELEASE</version>
    </dependency>
    

    编写PasswordEncoderUtil类,生成加密后的密码,采用BCrypt加密方法在每次生成密码时会加随机盐,所以生成密码每次可能不一样。

    public class PasswordEncoderUtil {
    public static void main(String[] args) {
    System.out.println(new BCryptPasswordEncoder().encode("123"));
    }
    }
    

    将上面的 加密的后的密码,用下面的方式插入

    1. 创建用户名或者密码的时候,用指定用户名密码即可。
      将上边程序输出的密码更新到数据库。
    INSERT INTO users (username, password, enabled) VALUES ('nacos1',
    '$2a$10$SmtL5C6Gp2sLjBrhrx1vj.dJAbJLa4FiJYZsBb921/wfvKAmxKWyu', TRUE);
    # 插入 用户 ,我们再将它赋予一个角色
    INSERT INTO roles (username, role) VALUES ('nacos1', 'ROLE_ADMIN');
    

    关闭登录功能
    由于部分公司自己开发控制台,不希望被nacos的安全filter拦截。因此nacos支持定制关闭登录功能找到配置文件${nacoshome}/conf/application.properties , 替换以下内容即可。我们这样配置 ,就不用输入密码了

    ## spring security config
    ### turn off security
    spring.security.enabled=false
    management.security=false
    security.basic.enabled=false
    nacos.security.ignore.urls=/**
    
    #nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console‐fe/public/**,/v1/auth/login,/v1/console/health,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**
    

    1.5 Nacos集群

    1.5.1 集群部署

    3个或3个以上Nacos节点才能构成集群

    (1)安装3个以上Nacos

    我们可以复制之前已经解压好的nacos文件夹,分别命名为nacos、nacos1、nacos2

    (2)配置集群配置文件

    在所有nacos目录的conf目录下,有文件 cluster.conf.example ,将其命名为 cluster.conf ,并将每行配置成 ip:port。(请配置3个或3个以上节点)

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

    由于是单机演示,需要更改nacos/的conf目录下application.properties中server.port,防止端口冲突。 如果服务器有多个ip也要指定具体的ip地址,如:nacos.inetutils.ip-address=127.0.0.1 例如

    server.port=8850 nacos.inetutils.ip‐address=127.0.0.1
    

    (3)集群模式启动 分别执行nacos目录的bin目录下的startup:

    startup -m cluster
    

    在这里插入图片描述
    在任意一个nacos的控制台中,可以看到如下内容:
    在这里插入图片描述

    1.5.2 客户端配置

    所有客户端,分别指定nacos集群中的若干节点:

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

    测试,使用快速上手的例子:
    (1)关掉127.0.0.1:8848 nacos Leader实例,发现Leader被成功选举至127.0.0.1:8850
    (2)紧接着重新启动Provider,这时马上请求consumer的/service出现错误,发现consumer与provider通信已 经出现问题。但经过短暂的时间后,通信恢复。 通过测试,我们可以看到,通过以上的集群部署已经达到了高可用的效果。

    1.5.3 生产环境部署建议

    下图是官方推荐的集群方案,通过域名 + VIP模式的方式来实现。客户端配置的nacos,当Nacos集群迁移时,客 户端配置无需修改。在这里插入图片描述
    至于数据库,生产环境下建议至少主备模式。通过修改${nacoshome}/conf/application.properties文件,能够使 nacos拥有多个数据源。

    spring.datasource.platform=mysql
    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
    

    下一篇 :

    Spring Cloud Alibaba基础教程-Nacos(三)

    参考文档 :感谢原创人员的付出

  • 相关阅读:
    Remove Duplicates from Sorted Array 分类: Leetcode(线性表) 2015-03-25 16:10 35人阅读 评论(0) 收藏
    Binary Tree Preorder Traversal 分类: Leetcode(树) 2015-03-24 17:04 28人阅读 评论(0) 收藏
    深度学习基础(七)Self-Taught Learning to Deep Networks 分类: 深度学习 2015-03-20 21:27 36人阅读 评论(0) 收藏
    深度学习基础(六)Self-Taught Learning 分类: 深度学习 2015-03-20 14:55 24人阅读 评论(0) 收藏
    Remove Duplicates from Sorted List 分类: Leetcode(链表) 2015-03-03 21:16 30人阅读 评论(0) 收藏
    Partition List 分类: Leetcode(链表) 2015-03-03 21:13 29人阅读 评论(0) 收藏
    深度学习基础(五)Softmax Regression 分类: 深度学习 2015-02-28 10:28 42人阅读 评论(0) 收藏
    Add Two Numbers 分类: Leetcode(链表) 2015-02-17 11:09 43人阅读 评论(0) 收藏
    Gas Station 分类: Leetcode(线性表) 2015-02-15 11:06 40人阅读 评论(0) 收藏
    jsp页面中HTML注释与jsp注释的区别
  • 原文地址:https://www.cnblogs.com/spiritmark/p/13009898.html
Copyright © 2020-2023  润新知