1. 网关
1.1. 网关的基础概念知识
- 概念:多个服务部署在不同ip,如果每个服务器都需要用户信息和密钥等,是不是每个服务都要一份密钥和用户信息呢?因此有一个网关来作为入口,就像小区保安和小区的关系,网关是保安,小区中的多个楼就是各个服务器
- 作用:负责请求的路由、转发、身份校验
- 例图
目前基本都是使用SpringCloud GateWay
入门步骤
- 创建新模块
- 引入网关依赖
- 编写启动类
- 配置路由规则
1.2. 网关路由的属性配置
路由断言主要是对请求进行一定条件判断与约束,满足条件的请求才转发
路由过滤器主要是在对请求和响应里对一些参数进行添加调整
具体用法在官方文档看看
在单个路由加filter只生效于单个路由,要生效于所有路由,需要配置default-filter
1.3. 网关登录校验
- 网关请求处理的底层逻辑
因此,具体实现就分为了以下四个步骤
- 自定义过滤器包括两种
常用的基本都是GlobalFilter,因此GateWayFilter需要再学吧
- 实现登录校验
这里就是正常JWT校验逻辑,只是把这块逻辑迁移到网关模块进行而已
- 网关传递用户
思路:
拦截器配置完后编写一个MVC配置类,把这个拦截器加到配置类中就可以生效了
要记得让spring扫描到这个配置类所在的包,要不然这个配置也不会生效的
弄完后报错了,网关加入了common模块,但网关不能处理WebMvcConfigurer类,因为网关模块底层不是MVC处理逻辑导致的
解决思路:让配置只在微服务生效,网关不生效
方法:SpringBoot自动装配原理,加一个条件,微服务有MVC,官关没有MVC。加入一个注解:@ConditionalOnclass(DispatchherService.class)MVC的核心类,有这个类就启动配置,没有就不启动,解决问题
- OpenFeign传递用户
从商城服务到购物车服务,商城服务的User信息是从网关得到的,因此可以从UserContext上下文取到,然后通过OpenFeign的中这个拦截器来进行请求头的添加,实现了用户信息的传递
注意:需要在启动类上加上配置这个类的注解才能生效
@EnableFeignClients(basePackages , defaultConfiguration)
2. 配置管理
问题:微服务可能会很多重复配置,维护成本高
解法:配置管理服务,例如Apllo,可以实现不停机修改配置功能,黑马用的是Nacos
主要学习Nacos的三个功能
- 配置共享
- 配置热更新
- 动态路由
2.1. 配置共享
- Nacos有界面化管理,直接点击配置管理->配置列表—>右上角加号就可以添加配置
- 处理流程图
写一个bootstrap.yml作为Nacos里变量的替换即可,然后在application.yml中就不要重复编写了
- 操作步骤
1.引入依赖
2.2. 配置热更新
懒得记了,黑马微服务2-12到2-13就是后面两节,习惯用Apollo