51Testing软件测试论坛

标题: SpringCloud:Nacos配置管理和Nacos集群(2) [打印本页]

作者: lsekfe    时间: 2022-7-18 13:32
标题: SpringCloud:Nacos配置管理和Nacos集群(2)
配置热更新
  Nacos配置更改之后,微服务可以实现热更行,根据配置的注入方式有不同的刷新方式。
  Nacos配置:
  1. people:
  2.     name: 配置热更新测试
复制代码
@RefreshScope实现热更新
  ·通过@Value注解注入,结合@RefreshScope实现热更新
  我们在@Value注解注入的类上添加@RefreshScope注解,重启服务后即可自动实现热更新:
  1. @RequestMapping
  2.   @RefreshScope
  3.   public class UserController {
  4.       @Value("${people.name}")
  5.       private String name;
  6.      
  7.       @GetMapping("/name")
  8.       public String getName() {
  9.           return name;
  10.       }
  11.   }
复制代码
@ConfigurationProperties实现热更新
  ·通过@ConfigurationProperties配置类注入,直接实现热更新
  配置类:
  1. @Data
  2.   @Component
  3.   @ConfigurationProperties(prefix = "people")
  4.   public class MyName {
  5.       private String name;
  6.   }
复制代码
使用配置类注入:
  1. @RestController
  2.   @RequestMapping
  3.   public class UserController {
  4.       @Autowired
  5.       private MyName myName;
  6.      
  7.       @GetMapping("/name")
  8.       public String getName() {
  9.           return myName.getName();
  10.       }
  11.   }
复制代码
注意:建议使用@ConfigurationProperties配置类注入的方式实现热更新。
  配置共享
  如何共享
  微服务会从Nacos读取配置文件共有两个:
  环境配置:[服务名]-[spring.profiles.active].yaml
  默认配置,多环境共享:[服务名].yaml
  所以当Nacos中存在默认配置的时候,任何环境都可以读取。
  配置读取优先级
  当本地配置,Nacos的环境配置和默认配置中有同名的属性,读取的优先级是按照 环境配置 > 默认配置 > 本地配置
  搭建 Nacos集群
  初始化数据库
  Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
  官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库可以参考传智教育的后续高手课程。
  这里我们以单点的数据库为例来讲解。
  首先新建一个数据库,命名为nacos,而后导入下面的SQL
  1. CREATE TABLE `config_info` (
  2.     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  3.     `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  4.     `group_id` varchar(255) DEFAULT NULL,
  5.     `content` longtext NOT NULL COMMENT 'content',
  6.     `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  7.     `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  8.     `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  9.     `src_user` text COMMENT 'source user',
  10.     `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  11.     `app_name` varchar(128) DEFAULT NULL,
  12.     `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  13.     `c_desc` varchar(256) DEFAULT NULL,
  14.     `c_use` varchar(64) DEFAULT NULL,
  15.     `effect` varchar(64) DEFAULT NULL,
  16.     `type` varchar(64) DEFAULT NULL,
  17.     `c_schema` text,
  18.     PRIMARY KEY (`id`),
  19.     UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  20.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
  21.   /******************************************/
  22.   /*   数据库全名 = nacos_config   */
  23.   /*   表名称 = config_info_aggr   */
  24.   /******************************************/
  25.   CREATE TABLE `config_info_aggr` (
  26.     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  27.     `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  28.     `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  29.     `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  30.     `content` longtext NOT NULL COMMENT '内容',
  31.     `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  32.     `app_name` varchar(128) DEFAULT NULL,
  33.     `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  34.     PRIMARY KEY (`id`),
  35.     UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
  36.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
  37.   /******************************************/
  38.   /*   数据库全名 = nacos_config   */
  39.   /*   表名称 = config_info_beta   */
  40.   /******************************************/
  41.   CREATE TABLE `config_info_beta` (
  42.     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  43.     `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  44.     `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  45.     `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  46.     `content` longtext NOT NULL COMMENT 'content',
  47.     `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  48.     `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  49.     `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  50.     `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  51.     `src_user` text COMMENT 'source user',
  52.     `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  53.     `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  54.     PRIMARY KEY (`id`),
  55.     UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  56.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
  57.   /******************************************/
  58.   /*   数据库全名 = nacos_config   */
  59.   /*   表名称 = config_info_tag   */
  60.   /******************************************/
  61.   CREATE TABLE `config_info_tag` (
  62.     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  63.     `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  64.     `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  65.     `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  66.     `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  67.     `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  68.     `content` longtext NOT NULL COMMENT 'content',
  69.     `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  70.     `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  71.     `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  72.     `src_user` text COMMENT 'source user',
  73.     `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  74.     PRIMARY KEY (`id`),
  75.     UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
  76.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
  77.   /******************************************/
  78.   /*   数据库全名 = nacos_config   */
  79.   /*   表名称 = config_tags_relation   */
  80.   /******************************************/
  81.   CREATE TABLE `config_tags_relation` (
  82.     `id` bigint(20) NOT NULL COMMENT 'id',
  83.     `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  84.     `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  85.     `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  86.     `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  87.     `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  88.     `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  89.     PRIMARY KEY (`nid`),
  90.     UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  91.     KEY `idx_tenant_id` (`tenant_id`)
  92.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
  93.   /******************************************/
  94.   /*   数据库全名 = nacos_config   */
  95.   /*   表名称 = group_capacity   */
  96.   /******************************************/
  97.   CREATE TABLE `group_capacity` (
  98.     `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  99.     `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  100.     `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  101.     `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  102.     `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  103.     `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  104.     `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  105.     `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  106.     `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  107.     `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  108.     PRIMARY KEY (`id`),
  109.     UNIQUE KEY `uk_group_id` (`group_id`)
  110.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
  111.   /******************************************/
  112.   /*   数据库全名 = nacos_config   */
  113.   /*   表名称 = his_config_info   */
  114.   /******************************************/
  115.   CREATE TABLE `his_config_info` (
  116.     `id` bigint(64) unsigned NOT NULL,
  117.     `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  118.     `data_id` varchar(255) NOT NULL,
  119.     `group_id` varchar(128) NOT NULL,
  120.     `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  121.     `content` longtext NOT NULL,
  122.     `md5` varchar(32) DEFAULT NULL,
  123.     `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  124.     `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  125.     `src_user` text,
  126.     `src_ip` varchar(50) DEFAULT NULL,
  127.     `op_type` char(10) DEFAULT NULL,
  128.     `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  129.     PRIMARY KEY (`nid`),
  130.     KEY `idx_gmt_create` (`gmt_create`),
  131.     KEY `idx_gmt_modified` (`gmt_modified`),
  132.     KEY `idx_did` (`data_id`)
  133.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
  134.   /******************************************/
  135.   /*   数据库全名 = nacos_config   */
  136.   /*   表名称 = tenant_capacity   */
  137.   /******************************************/
  138.   CREATE TABLE `tenant_capacity` (
  139.     `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  140.     `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  141.     `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  142.     `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  143.     `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  144.     `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  145.     `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  146.     `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  147.     `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  148.     `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  149.     PRIMARY KEY (`id`),
  150.     UNIQUE KEY `uk_tenant_id` (`tenant_id`)
  151.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
  152.   CREATE TABLE `tenant_info` (
  153.     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  154.     `kp` varchar(128) NOT NULL COMMENT 'kp',
  155.     `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  156.     `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  157.     `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  158.     `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  159.     `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  160.     `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  161.     PRIMARY KEY (`id`),
  162.     UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  163.     KEY `idx_tenant_id` (`tenant_id`)
  164.   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
  165.   CREATE TABLE `users` (
  166.   `username` varchar(50) NOT NULL PRIMARY KEY,
  167.   `password` varchar(500) NOT NULL,
  168.   `enabled` boolean NOT NULL
  169.   );
  170.   CREATE TABLE `roles` (
  171.   `username` varchar(50) NOT NULL,
  172.   `role` varchar(50) NOT NULL,
  173.   UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
  174.   );
  175.   CREATE TABLE `permissions` (
  176.       `role` varchar(50) NOT NULL,
  177.       `resource` varchar(255) NOT NULL,
  178.       `action` varchar(8) NOT NULL,
  179.       UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
  180.   );
  181.   INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
  182.   INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
复制代码
配置Nacos
  将这个包解压到任意非中文目录下,如图:
[attach]139232[/attach]
目录说明:
  ·bin:启动脚本
  · conf:配置文件
  进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
[attach]139233[/attach]
然后添加内容:
  1.  127.0.0.1:8845
  2.   127.0.0.1.8846
  3.   127.0.0.1.8847
复制代码
然后修改application.properties文件,添加数据库配置:
  1. spring.datasource.platform=mysql
  2.   db.num=1
  3.   db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
  4.   db.user.0=root
  5.   db.password.0=123
复制代码
启动
  将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3
[attach]139234[/attach]
然后分别修改三个文件夹中的application.properties
  nacos1:
  1.   server.port=8845
复制代码
nacos2:
  1.   server.port=8846
复制代码
nacos3:
  1. server.port=8847
复制代码
然后分别启动三个nacos节点:
  1. startup.cmd
复制代码
nginx反向代理
upstream nacos-cluster {
      server 127.0.0.1:8845;
  server 127.0.0.1:8846;
  server 127.0.0.1:8847;
  }
  server {
      listen       80;
      server_name  localhost;
      location /nacos {
          proxy_pass http://nacos-cluster;
      }
  }

而后在浏览器访问:http://localhost/nacos即可。
  代码中application.yml文件配置如下:
  1. spring:
  2.     cloud:
  3.       nacos:
  4.         server-addr: localhost:80 # Nacos地址
复制代码
优化
  实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置。
  Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离。















欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2