微服务1 springcloud学习笔记P1-P40

 b微服务技术栈_哔哩哔哩_bilibili

文档资料:

链接:https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwd=d03r 
提取码:d03r

一 了解微服务技术

微服务1 springcloud学习笔记P1-P40_第1张图片

微服务1 springcloud学习笔记P1-P40_第2张图片

微服务1 springcloud学习笔记P1-P40_第3张图片

微服务1 springcloud学习笔记P1-P40_第4张图片

微服务1 springcloud学习笔记P1-P40_第5张图片

微服务1 springcloud学习笔记P1-P40_第6张图片

二 Eureka

微服务1 springcloud学习笔记P1-P40_第7张图片

(1) Eureka配置

微服务1 springcloud学习笔记P1-P40_第8张图片

微服务1 springcloud学习笔记P1-P40_第9张图片

(2) 注册user-service

微服务1 springcloud学习笔记P1-P40_第10张图片

(3) 总结

微服务1 springcloud学习笔记P1-P40_第11张图片

Ribbon 负载均衡

(1) 流程

微服务1 springcloud学习笔记P1-P40_第12张图片

微服务1 springcloud学习笔记P1-P40_第13张图片

微服务1 springcloud学习笔记P1-P40_第14张图片

微服务1 springcloud学习笔记P1-P40_第15张图片

三 nacos配置管理

(一) nacos注册中心(服务)

(1) 启动

微服务1 springcloud学习笔记P1-P40_第16张图片

startup.cmd -m standalone

(2) 分级存储模型

微服务1 springcloud学习笔记P1-P40_第17张图片

微服务1 springcloud学习笔记P1-P40_第18张图片

(3) 隔离空间 namespace

微服务1 springcloud学习笔记P1-P40_第19张图片

微服务1 springcloud学习笔记P1-P40_第20张图片

微服务1 springcloud学习笔记P1-P40_第21张图片

微服务1 springcloud学习笔记P1-P40_第22张图片

微服务1 springcloud学习笔记P1-P40_第23张图片

微服务1 springcloud学习笔记P1-P40_第24张图片

(4) 临时实例和非临时实例

微服务1 springcloud学习笔记P1-P40_第25张图片

微服务1 springcloud学习笔记P1-P40_第26张图片

(二) nacos配置管理

(1) 统一配置 (nacos配置管理)

微服务1 springcloud学习笔记P1-P40_第27张图片

微服务1 springcloud学习笔记P1-P40_第28张图片

(2) 统一配置管理 (项目配置】)
  • 配置获取步骤 bootstrap.yml 优先级 高于 application.yml

微服务1 springcloud学习笔记P1-P40_第29张图片

微服务1 springcloud学习笔记P1-P40_第30张图片

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
spring:
  application:
    name: userservice
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos地址
      config:
        file-extension: yaml # 文件后缀名
(3) 测试

微服务1 springcloud学习笔记P1-P40_第31张图片

(4) 总结

(三) nacos的配置自动刷新

(1) 方式一 注解@RefreshScope

微服务1 springcloud学习笔记P1-P40_第32张图片

(2) 方式二 使用 @ConfigurationProperties注解

微服务1 springcloud学习笔记P1-P40_第33张图片

(3) 总结

微服务1 springcloud学习笔记P1-P40_第34张图片

(四) nacos 多环境共享

(1) userservice.yaml 是被所有配置共享的

微服务1 springcloud学习笔记P1-P40_第35张图片

(2) 配置文件优先级:  带环境的(dev test) > 共享配置 > 本地配置

微服务1 springcloud学习笔记P1-P40_第36张图片

(3) 总结

微服务1 springcloud学习笔记P1-P40_第37张图片

(五) nacos集群搭建

1.集群结构图

微服务1 springcloud学习笔记P1-P40_第38张图片

微服务1 springcloud学习笔记P1-P40_第39张图片

微服务1 springcloud学习笔记P1-P40_第40张图片

微服务1 springcloud学习笔记P1-P40_第41张图片

2.搭建集群
2.1.初始化数据库

Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。

官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库可以参考传智教育的后续高手课程。

这里我们以单点的数据库为例来讲解。

首先新建一个数据库,命名为nacos,而后导入下面的SQL:

CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `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='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  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='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  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='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `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='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = 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 'app_name',
  `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 '' COMMENT '租户字段',
  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='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  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='tenant_info';

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 ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
2.2.下载nacos

nacos在GitHub上有下载地址:Tags · alibaba/nacos · GitHub,可以选择任意版本下载。

本例中才用1.4.1版本

链接:https://pan.baidu.com/s/1ktHAxNCmQvTaW8V-1_2Epg 
提取码:nwvf

2.3.配置Nacos

微服务1 springcloud学习笔记P1-P40_第42张图片

微服务1 springcloud学习笔记P1-P40_第43张图片

然后修改application.properties文件,添加数据库配置

spring.datasource.platform=mysql

db.num=1

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
db.user.0=root
db.password.0=123
2.4.启动

微服务1 springcloud学习笔记P1-P40_第44张图片

2.5.nginx反向代理
  • nginx启动 start nginx.exe
  • nginx.exe -s reload
  • nginx.exe -s stop

微服务1 springcloud学习笔记P1-P40_第45张图片

修改conf/nginx.conf文件,配置如下(放在http 里面任意位置即可):

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文件配置如下:

spring:
  cloud:
    nacos:
      server-addr: localhost:80 # Nacos地址
3 总结

微服务1 springcloud学习笔记P1-P40_第46张图片

四 Feign

(一) 基于Feign远程调用(替代RestTemplate)

1.1  RestTemplate 方式调用存在的问题

微服务1 springcloud学习笔记P1-P40_第47张图片

1.2 Feign的介绍

微服务1 springcloud学习笔记P1-P40_第48张图片

1.3 定义和使用Feign客户端

微服务1 springcloud学习笔记P1-P40_第49张图片

微服务1 springcloud学习笔记P1-P40_第50张图片

1.4 总结

微服务1 springcloud学习笔记P1-P40_第51张图片

(二) Feign自定义配置

微服务1 springcloud学习笔记P1-P40_第52张图片

2.1 方法一 配置文件修改

微服务1 springcloud学习笔记P1-P40_第53张图片

2.2 方法二 java代码进行配置

微服务1 springcloud学习笔记P1-P40_第54张图片

2.3 总结

微服务1 springcloud学习笔记P1-P40_第55张图片

(三) Feign性能调优

3.1 Feign 连接池(客户端实现)

微服务1 springcloud学习笔记P1-P40_第56张图片

3.2 Feign-连接池配置

1.3 总结

微服务1 springcloud学习笔记P1-P40_第57张图片

(四) Feign 最佳实践分析

4.1 方法一 统一接口

微服务1 springcloud学习笔记P1-P40_第58张图片

4.2 方法二 独立模块

微服务1 springcloud学习笔记P1-P40_第59张图片

4.3 总结

微服务1 springcloud学习笔记P1-P40_第60张图片

(五)  抽取FeignClient

5.1 配置

微服务1 springcloud学习笔记P1-P40_第61张图片

  • 扫描包

微服务1 springcloud学习笔记P1-P40_第62张图片

5.2 总结

微服务1 springcloud学习笔记P1-P40_第63张图片

五 统一网关Gateway

(一) Gateway网关的介绍

Spring Cloud Gateway 官方网站

1.1 网关

微服务1 springcloud学习笔记P1-P40_第64张图片

1.2 网关的技术实现

微服务1 springcloud学习笔记P1-P40_第65张图片

1.3 总结

微服务1 springcloud学习笔记P1-P40_第66张图片

(二) Gatewaya网关的入门

2.1  搭建网关服务

微服务1 springcloud学习笔记P1-P40_第67张图片

2.2 编写路由配置及nacos地址

微服务1 springcloud学习笔记P1-P40_第68张图片

2.3 总结

微服务1 springcloud学习笔记P1-P40_第69张图片

(三) 路由断言工厂 Route Predicate Factories

3.0 官方地址

Spring Cloud Gateway

3.1 说明 

微服务1 springcloud学习笔记P1-P40_第70张图片

微服务1 springcloud学习笔记P1-P40_第71张图片
Spring Cloud Gateway微服务1 springcloud学习笔记P1-P40_第72张图片

3.2 总结

微服务1 springcloud学习笔记P1-P40_第73张图片

(四) 路由过滤器 GatewayFilter (网关 配置)

4.1 官方地址

Spring Cloud Gateway

4.2 介绍 

微服务1 springcloud学习笔记P1-P40_第74张图片

4.3 过滤器工厂 GatewayFilterFactory
  • 2023-12: 现在应该是38种

微服务1 springcloud学习笔记P1-P40_第75张图片

4.4 案例

微服务1 springcloud学习笔记P1-P40_第76张图片

微服务1 springcloud学习笔记P1-P40_第77张图片

4.5 总结

微服务1 springcloud学习笔记P1-P40_第78张图片

(五)  全局过滤器 GlobalFilter (java)

5.1 官网

Spring Cloud Gateway

5.2 介绍

微服务1 springcloud学习笔记P1-P40_第79张图片

微服务1 springcloud学习笔记P1-P40_第80张图片

5.3 拦截 案例

微服务1 springcloud学习笔记P1-P40_第81张图片

5.4 步骤 
  • order 是顺序 过滤器一定要有顺序

微服务1 springcloud学习笔记P1-P40_第82张图片

5.5 总结

微服务1 springcloud学习笔记P1-P40_第83张图片

(六) 过滤器执行顺序

6.1 介绍

微服务1 springcloud学习笔记P1-P40_第84张图片

6.2 执行顺序

微服务1 springcloud学习笔记P1-P40_第85张图片

6.3 总结

微服务1 springcloud学习笔记P1-P40_第86张图片

(七) Gateway 跨域处理

7.1 介绍

微服务1 springcloud学习笔记P1-P40_第87张图片

7.2 配置

微服务1 springcloud学习笔记P1-P40_第88张图片

微服务1 springcloud学习笔记P1-P40_第89张图片

  • 在gateway服务的application.yml文件中,添加下面的配置:
spring:
  cloud:
    gateway:
      # 。。。
      globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站的跨域请求 
              - "http://localhost:8090"
            allowedMethods: # 允许的跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期

微服务1 springcloud学习笔记P1-P40_第90张图片

你可能感兴趣的:(spring,cloud,微服务,java,springboot)