SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈(nacos)

news/2024/11/28 1:47:40/

Nacos注册中心

(一)认识和安装Nacos

1、认识Nacos

在这里插入图片描述

2、安装nacos

这里下载1.4.1版本

默认端口是8848

下载解压后,终端进入到nacos/bin下,bash startup.sh -m standalone
然后查看start.out文件得到一个网址就可以查看nacos的服务列表,http://10.10.20.18:8848/nacos/index.html

(二)快速入门

1、服务注册到Nacos

在这里插入图片描述
在父工程中将springcloud-alibaba的管理依赖引入进来,以后它有关的所有版本都不用操心了

在这里插入图片描述
1、首先找到父工程的pom,已经有了springcloud的管理依赖,springcloudalibaba比较特殊,是后来才加入的,所以它没有在springcloud-dependencies中,需要单独去引入。所以直接将这个依赖放到springcloud-dependencies的下一个

<!-- springCloud -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope>
</dependency>
<!--nacos的管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

2、接下来就可以改造服务了。
将userservice和orderservice的pom中的eureka的dependency注释掉,然后引入nacos客户端依赖包

<!--nacos客户端依赖包-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3、修改yml文件
userservice和orderservice

将eureka的注释掉
往上找到spring这块,在spring的里面加上nacos的配置

userservice:

server:port: 8081
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: root123456driver-class-name: com.mysql.jdbc.Driverapplication:name: userservice # user服务的服务名称cloud:nacos:server-addr: localhost:8848 # nacos服务端地址
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: # eureka的地址信息
#      defaultZone: http://127.0.0.1:10086/eureka

orderservice

server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: root123456driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice # order服务的服务名称cloud:nacos:server-addr: localhost:8848 # nacos服务端地址
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: # eureka的地址信息
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
ribbon:eager-load:enabled: true # 开启饥饿加载clients: # 指定饥饿加载的服务名称- userservice

其他都不需要改,包括ribbon

启动两个userservice和一个orderservice:
在这里插入图片描述
点击userservice详情:
在这里插入图片描述
使用order/101、order/102、…测试,发现仍然是userservice轮询,因此负载均衡没有问题

2、总结

在这里插入图片描述

(三)服务多级存储模型

1、Nacos服务多级存储模型

在这里插入图片描述

之前是有两层概念,一层是服务,第二层就是实例。一个服务可以包含多个实例。

我们会将一个服务的多个实例部署到多个机房,就像把鸡蛋分散开了,这样就可以做到容灾
而Nacos服务多级存储模型就是引入了这样一个机房的概念,或者说地域的概念,它把存在一个机房的多个实例称为一个集群

2、服务跨集群调用问题

在这里插入图片描述
打开nacos中orderservice的详情,可以看到它集群名字为“DEFAULT”,也就是说没有集群。那下面我们就去学习如何配置实例的集群属性

3、服务集群属性

在这里插入图片描述
接下来我们要将UserApplication、UserApplication2放在hz集群,UserApplication3设置在sh集群

1、打开userservice的application.yml

spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: root123456driver-class-name: com.mysql.jdbc.Driverapplication:name: userservice # user服务的服务名称cloud:nacos:server-addr: localhost:8848 # nacos服务端地址discovery:cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州

然后启动UserApplication和UserApplication2
那如果想要UserApplication3是SH集群,就是把userservice的application.yml中刚才那个cluster-name换成SH,然后再启动它。这个时候不要重启UserApplication和UserApplication2

在这里插入图片描述
在这里插入图片描述

4、总结

在这里插入图片描述
Nacos服务多级存储模型其实就是在原有分级上多做了一层,原来是两级,现在又把实例按照地域划分成了集群

(四)NacosRule负载均衡

1、服务集群属性

不过我们最终想要实现的是orderservice远程调用userserivce时优先选择本地集群,因此我们要给orderserivce也配置一个集群属性

orderservice中的application.yml,给它也是HZ集群,然后重启orderservice
在这里插入图片描述
然后我们在浏览器中访问order/101、order/102、order/103

然后回到IDEA中看到UserApplication、UserApplication2、UserApplication3都有输出sql语句,说明它们都被访问了,也就是说orderservice发起远程调用时没有优先选择同集群,依然是采用轮询方案
我们知道服务在选择实例时,它的规则全都是由负载均衡的规则来决定的,也就是IRule。现在我们没有配置IRule,因此默认的规则就是轮询

2、根据集群负载均衡

在这里插入图片描述
修改负载均衡的规则同样是在yml里面。之前已经配置过orderservice的userservice的ribbon里负载均衡的规则了,不过配的是随机,现在只需要替换它

userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

然后重启order服务

然后我们在浏览器中访问order/101、order/102、order/103、…、order/107,发现全部都在UserApplication和UserApplication2,UserApplication3一个都没有
nacos特点:优先选择本地集群,在本地集群内的多个服务当中再采用随机方式进行负载均衡

此时如果把8081和8082停掉会怎么样呢?
在这里插入图片描述
会发现本地集群没有服务时也能访问,
order中会出现一个警告信息
在这里插入图片描述

3、总结

在这里插入图片描述

(五)服务实例的权重设置

1、根据权重负载均衡

在这里插入图片描述
在这里插入图片描述
权重调为0时,就不会被访问!

2、总结

在这里插入图片描述

(六)环境隔离namespace

1、环境隔离

在这里插入图片描述
环境隔离就是在对服务service做隔离
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那么我们来设置命名空间
在这里插入图片描述

在这里插入图片描述
那么怎么样去修改一个服务的命名空间呢?这个就不是在控制台修改的了,需要在代码区域了

在这里插入图片描述
就是添加了一个namespace,注意到填的不是名称是id

namespace: d2afdd92-4e10-47ee-be86-1b080c1ec582 # 命名空间,填id

然后重启orderservice
在这里插入图片描述
此时它们就是两个世界的人了,隔离,因此再访问就报错了:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、总结

在这里插入图片描述

环境隔离是用namespace来做的

(七)Nacos和Eureka的对比

1、nacos注册中心细节分析

在这里插入图片描述

2、临时实例和非临时实例

在这里插入图片描述

将orderservice的修改:

spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: root123456driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice # order服务的服务名称cloud:nacos:server-addr: localhost:8848,localhost:8847,localhost:8849 # nacos服务端地址discovery:cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州namespace: d2afdd92-4e10-47ee-be86-1b080c1ec582 # 命名空间,填idephemeral: false # 设置为非临时实例

此时先关闭orderservice,去nacos控制台,就没有了
再次启动orderservice
在这里插入图片描述
再在IDEA中关闭orderservice,nacos控制台中orderservice还在,只是红色了
在这里插入图片描述
再等很久这个服务也不会被剔除,除非手动删除它,否则永远都在

3、总结

在这里插入图片描述

(八)Nacos配置管理-Nacos实现配置管理

1、统一配置管理

在这里插入图片描述
打开nacos控制台,
在这里插入图片描述
点击加号,新建配置
在这里插入图片描述

在这里插入图片描述

切记这个配置内容不是把application.yml中一切内容都弄过来,只是有热更新需求的

(九)Nacos配置管理-微服务配置拉取

我们已经把部分配置放到nacos服务器上,下面我们的微服务就要想办法得到这些配置了

1、统一配置管理

在这里插入图片描述
与nacos地址和配置文件有关的所有信息都应该放到bootstrap.yml中
在这里插入图片描述
之前nacos-discovery是发现,这里config是配置

服务名称+开发环境+文件后缀名=控制台中配置的data id(userservice-dev.yaml),因此这个配置目的就是知道是哪个文件,而localhost:8848是nacos地址,就已经知道去哪读配置了,又知道了读取的配置叫什么名字

1、在userservice中引入nacos配置管理客户端依赖

<!--nacos的配置管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2、bootstrap.yml
在这里插入图片描述

spring:application:name: userservice # 服务名称profiles:active: dev # 开发环境,这里是devcloud:nacos:server-addr: localhost:8848 # Nacos地址config:file-extension: yaml # 文件后缀名

application.yml中还有一些和它重复的地方,比如application:name:,cloud:nacos:,这些都删除,变成:

application.yml:

server:port: 8081
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: root123456driver-class-name: com.mysql.jdbc.Driver
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS

好了,那如何证明我们已经从nacos拉到配置了呢?

在这里插入图片描述

那我们在UserController代码中试图读取这个配置
读取配置需要用**@Value注解**
在这里插入图片描述

@Value("${pattern.dateformat}")
private String dateformat;

如果这个dateformat能加载成功,就证明我们确实拿到了配置

@GetMapping("now")
public String now() {return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}

在这里插入图片描述
在这里插入图片描述
这说明8081和8082这两个微服务都已经成功的从nacos控制台得到了这个配置信息

到这里,我们就实现微服务获取nacos中的配置信息了

2、总结

在这里插入图片描述

(十)Nacos配置管理-配置热更新

我们nacos控制中修改刚才那个配置模版

修改为:
在这里插入图片描述
我们希望改完以后http://127.0.0.1:8081/user/now微服务能立马变化,我们刷新,
在这里插入图片描述
虽然仍然显示当前时间,但没有根据配置变化。没有实现配置热更新

1、配置自动刷新

在这里插入图片描述
然后重启服务,
在这里插入图片描述
在这里插入图片描述
刷新页面,
在这里插入图片描述
没有重启微服务,因此实现了配置的热更新
在这里插入图片描述

在这里插入图片描述
这个方式二需要新建一个类,专门完成属性的加载
在这里插入图片描述

它采用的是约定大于配置的方式,只要前缀名和变量名两者拼接,与配置文件一致,就能完成属性的自动注入

为了让这个类可以被任何人使用,我们添加@Component注解,把它注册为Spring的一个Bean

然后在UserController中将@RefreshScope去掉,下面@Value的dateformat两个一起去掉。还要@Autowired注入PatternProperties

@Autowired
private PatternProperties properties;@GetMapping("now")
public String now() {return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
}

重启,
在这里插入图片描述
更改配置,刷新,
在这里插入图片描述

2、总结

在这里插入图片描述

(十一)Nacos配置管理-多环境配置共享

1、多环境配置共享

比如有一个配置属性,在开发、生产、测试等环境下的值是一样的,那像这样的配置,在每个配置文件中都去写一份,是很浪费的;而且如果要改动,要在每个配置文件中都去改,这样显然是不合适的。我们想要找到一个地方,配一次以后,不管环境怎么变,这个配置都能被加载。这就是 多环境配置共享 的需求

在这里插入图片描述
在这里插入图片描述

现在我们有两个配置文件了,一个是第一个环境特有的,而另一个是多环境共享的

我们打开idea,要在userservice中读取刚才那个共享配置文件的属性,在PatternProperties增加一个,里面现在只有一个属性

private String envSharedValue;

然后为了展示,要在UserController中添加一个方法。注意因为UserController有一个@RestController注解,会将这个方法返回的PatternProperties自动转化成json字符串

@GetMapping("prop")
public PatternProperties properties() {return properties;
}

看userserivce的bootsrap.yml,看到它是dev环境,因此它可以同时读到userservice.yaml和userservice-dev.yaml

现在为了对比,再提供一个userserivce,把它的环境改一改,改成测试环境,只要将bootstrap.yml中dev改成test
!!但是如果这样改,将来重启又要改回来。这里有一种不需要更改代码的方法,右键UserService2,编辑配置,往下翻到最后,“有效配置文件“Active Profiles,这里就是激活的那个属性,跟在bootstrap.yml中配spring-profiles-active效果是完全一样的,填“test”即可,表示它是测试环境(虽然此时bootstrao.yml文件中仍然是dev但不影响)
在这里插入图片描述
然后重启它

这时8082的微服务是test环境,因此它不能读到userservice-dev.yaml,但它能读到共享的userserive.yaml文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那如果userserive.yaml和userservice-dev.yaml中有一个相同的属性会以谁的为准呢?这其实考察的就是配置文件的优先级了;而且远端有配置,IDEA(application.yml)如果也有配置,那又以谁的优先级为准呢?

在这里插入图片描述

服务名-profile.yaml也就是带环境的;第二个是多环境共享

2、总结

在这里插入图片描述

(十二)Nacos配置管理-nacos集群搭建

1、Nacos集群搭建

之前我们一直使用的都是单点的nacos。但如果在企业中,更强调的是高可用,所以nacos一定要做成一个集群
在这里插入图片描述
在这里插入图片描述
条件有限,我们不会有三台电脑演示三个nacos,我们会在一台电脑上部署三个nacos结点
mysql理论上来说是集群,
在这里插入图片描述
在这里插入图片描述
(1)新建一个nacos数据库

新建查询:

CREATE TABLE `config_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT &apos;id&apos;,`data_id` varchar(255) NOT NULL COMMENT &apos;data_id&apos;,`group_id` varchar(255) DEFAULT NULL,`content` longtext NOT NULL COMMENT &apos;content&apos;,`md5` varchar(32) DEFAULT NULL COMMENT &apos;md5&apos;,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;创建时间&apos;,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;修改时间&apos;,`src_user` text COMMENT &apos;source user&apos;,`src_ip` varchar(50) DEFAULT NULL COMMENT &apos;source ip&apos;,`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT &apos;&apos; COMMENT &apos;租户字段&apos;,`c_desc` varchar(256) DEFAULT NULL,`c_use` varchar(64) DEFAULT NULL,`effect` varchar(64) DEFAULT NULL,`type` varchar(64) DEFAULT NULL,`c_schema` text,PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;config_info&apos;;/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT &apos;id&apos;,`data_id` varchar(255) NOT NULL COMMENT &apos;data_id&apos;,`group_id` varchar(255) NOT NULL COMMENT &apos;group_id&apos;,`datum_id` varchar(255) NOT NULL COMMENT &apos;datum_id&apos;,`content` longtext NOT NULL COMMENT &apos;内容&apos;,`gmt_modified` datetime NOT NULL COMMENT &apos;修改时间&apos;,`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT &apos;&apos; COMMENT &apos;租户字段&apos;,PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;增加租户字段&apos;;/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT &apos;id&apos;,`data_id` varchar(255) NOT NULL COMMENT &apos;data_id&apos;,`group_id` varchar(128) NOT NULL COMMENT &apos;group_id&apos;,`app_name` varchar(128) DEFAULT NULL COMMENT &apos;app_name&apos;,`content` longtext NOT NULL COMMENT &apos;content&apos;,`beta_ips` varchar(1024) DEFAULT NULL COMMENT &apos;betaIps&apos;,`md5` varchar(32) DEFAULT NULL COMMENT &apos;md5&apos;,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;创建时间&apos;,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;修改时间&apos;,`src_user` text COMMENT &apos;source user&apos;,`src_ip` varchar(50) DEFAULT NULL COMMENT &apos;source ip&apos;,`tenant_id` varchar(128) DEFAULT &apos;&apos; COMMENT &apos;租户字段&apos;,PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;config_info_beta&apos;;/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT &apos;id&apos;,`data_id` varchar(255) NOT NULL COMMENT &apos;data_id&apos;,`group_id` varchar(128) NOT NULL COMMENT &apos;group_id&apos;,`tenant_id` varchar(128) DEFAULT &apos;&apos; COMMENT &apos;tenant_id&apos;,`tag_id` varchar(128) NOT NULL COMMENT &apos;tag_id&apos;,`app_name` varchar(128) DEFAULT NULL COMMENT &apos;app_name&apos;,`content` longtext NOT NULL COMMENT &apos;content&apos;,`md5` varchar(32) DEFAULT NULL COMMENT &apos;md5&apos;,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;创建时间&apos;,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;修改时间&apos;,`src_user` text COMMENT &apos;source user&apos;,`src_ip` varchar(50) DEFAULT NULL COMMENT &apos;source ip&apos;,PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;config_info_tag&apos;;/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (`id` bigint(20) NOT NULL COMMENT &apos;id&apos;,`tag_name` varchar(128) NOT NULL COMMENT &apos;tag_name&apos;,`tag_type` varchar(64) DEFAULT NULL COMMENT &apos;tag_type&apos;,`data_id` varchar(255) NOT NULL COMMENT &apos;data_id&apos;,`group_id` varchar(128) NOT NULL COMMENT &apos;group_id&apos;,`tenant_id` varchar(128) DEFAULT &apos;&apos; COMMENT &apos;tenant_id&apos;,`nid` bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`nid`),UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;config_tag_relation&apos;;/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT &apos;主键ID&apos;,`group_id` varchar(128) NOT NULL DEFAULT &apos;&apos; COMMENT &apos;Group ID,空字符表示整个集群&apos;,`quota` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;配额,0表示使用默认值&apos;,`usage` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;使用量&apos;,`max_size` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;单个配置大小上限,单位为字节,0表示使用默认值&apos;,`max_aggr_count` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;聚合子配置最大个数,,0表示使用默认值&apos;,`max_aggr_size` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值&apos;,`max_history_count` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;最大变更历史数量&apos;,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;创建时间&apos;,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;修改时间&apos;,PRIMARY KEY (`id`),UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;集群、各Group容量信息表&apos;;/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (`id` bigint(64) unsigned NOT NULL,`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`data_id` varchar(255) NOT NULL,`group_id` varchar(128) NOT NULL,`app_name` varchar(128) DEFAULT NULL COMMENT &apos;app_name&apos;,`content` longtext NOT NULL,`md5` varchar(32) DEFAULT NULL,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`src_user` text,`src_ip` varchar(50) DEFAULT NULL,`op_type` char(10) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT &apos;&apos; COMMENT &apos;租户字段&apos;,PRIMARY KEY (`nid`),KEY `idx_gmt_create` (`gmt_create`),KEY `idx_gmt_modified` (`gmt_modified`),KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;多租户改造&apos;;/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT &apos;主键ID&apos;,`tenant_id` varchar(128) NOT NULL DEFAULT &apos;&apos; COMMENT &apos;Tenant ID&apos;,`quota` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;配额,0表示使用默认值&apos;,`usage` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;使用量&apos;,`max_size` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;单个配置大小上限,单位为字节,0表示使用默认值&apos;,`max_aggr_count` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;聚合子配置最大个数&apos;,`max_aggr_size` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值&apos;,`max_history_count` int(10) unsigned NOT NULL DEFAULT &apos;0&apos; COMMENT &apos;最大变更历史数量&apos;,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;创建时间&apos;,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT &apos;修改时间&apos;,PRIMARY KEY (`id`),UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;租户容量信息表&apos;;CREATE TABLE `tenant_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT &apos;id&apos;,`kp` varchar(128) NOT NULL COMMENT &apos;kp&apos;,`tenant_id` varchar(128) default &apos;&apos; COMMENT &apos;tenant_id&apos;,`tenant_name` varchar(128) default &apos;&apos; COMMENT &apos;tenant_name&apos;,`tenant_desc` varchar(256) DEFAULT NULL COMMENT &apos;tenant_desc&apos;,`create_source` varchar(32) DEFAULT NULL COMMENT &apos;create_source&apos;,`gmt_create` bigint(20) NOT NULL COMMENT &apos;创建时间&apos;,`gmt_modified` bigint(20) NOT NULL COMMENT &apos;修改时间&apos;,PRIMARY KEY (`id`),UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=&apos;tenant_info&apos;;CREATE TABLE `users` (`username` varchar(50) NOT NULL PRIMARY KEY,`password` varchar(500) NOT NULL,`enabled` boolean NOT NULL
);CREATE TABLE `roles` (`username` varchar(50) NOT NULL,`role` varchar(50) NOT NULL,UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);CREATE TABLE `permissions` (`role` varchar(50) NOT NULL,`resource` varchar(255) NOT NULL,`action` varchar(8) NOT NULL,UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);INSERT INTO users (username, password, enabled) VALUES (&apos;nacos&apos;, &apos;$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu&apos;, TRUE);INSERT INTO roles (username, role) VALUES (&apos;nacos&apos;, &apos;ROLE_ADMIN&apos;);

http://www.ppmy.cn/news/48827.html

相关文章

UEFI开发探索13 – 访问PCI/PCI-E设备1

我所用的测试卡是PCI-E设备,公司商用的产品也是PCI-E设备。所以,我很早就“被迫”去读那些PCI spec。 从软件工程师的角度,我觉得只要解决几个问题就行了,其余的细节不妨碍编程。 PCI/PCI-E设备是如何定位的,也即程序如何找到设备;系统把它认作什么设备;如何访问设备的…

【服务器数据恢复】Storwize存储上的Oracle数据库数据恢复案例

服务器数据恢复环境&#xff1a; IBM Storwize某型号存储&#xff0c;共10块磁盘&#xff0c;组建了2组Mdisk加入到一个存储池中&#xff0c;创建了一个通用卷存放数据&#xff0c;存放的数据包含oracle数据库。 服务器故障&#xff1a; 存储中其中一组Mdisk有两块磁盘出现故障…

【推荐】1657- 灵活可扩展,2023年值得尝试的13款富文本编辑器

作为前端开发人员&#xff0c;我们经常需要为网站和应用程序添加文本内容。与传统的文本编辑器不同&#xff0c;富文本编辑器可让您轻松创建各种类型的文本内容&#xff0c;包括加粗字体、斜体字、框架、列表、图片和视频等。 本文我将向大家推荐 13 款开源的灵活可拓展的富文本…

服务(第八篇)location和rewrite

常用的Nginx正则表达式: 从功能看&#xff0c;rewrite和location似乎有点像&#xff0c;都能实现跳转&#xff0c;主要区别在于rewrite是在同一域名内更改获取资源的路径&#xff0c;而location是对一类路径做控制访问或反向代理&#xff0c;还可以proxy_pass到其他机器。 rew…

CSS基础——盒子模型

目录 简介 盒子模型组成 内容区 内边距 边框 border-width border-color border-style border 外边距 负值 auto 简写属性 垂直外边距的重叠 浏览器默认设置 内联元素的盒子 简介 在网页中&#xff0c;一切都是可以看作为“盒子”。 在css处理网页的时候&…

COCO数据集格式介绍

COCO是微软构建的一个目标检测大型基准数据集&#xff0c;非常非常著名&#xff0c;包括检测、分割、关键点估计等任务&#xff0c;目前用的比较多的是COCO2017数据集&#xff0c;其他如COCO2014数据集格式类似&#xff0c;所以我这里以COCO2017为例。 首先我们来看目录结构&am…

1.18 从0开始学习Unity游戏开发--资源加载

在上一篇文章中&#xff0c;我们大约是开始接触到资源加载的事情了&#xff0c;场景资源则是一个比较特殊的资源&#xff0c;我们只要添加到Build Settings里面&#xff0c;那么我们就可以通过API直接加载。 但是其他类型的资源怎么办呢&#xff1f;比如我们制作一个网络游戏&…

JavaScript加解密

加密是一种将信息转换为其他形式的过程&#xff0c;使得只有授权人才能访问它。解密是将已经加密的信息转换回原始形式的过程。在互联网上&#xff0c;加密和解密通常是通过密码实现的&#xff0c;这些密码称为密钥。 JavaScript是一种非常流行的编程语言&#xff0c;用于在网…