
SpringCloud 入门(下)
本篇文章继承上文,主要结合实际项目 Elevator-backend
来学习Spring Cloud 的组件。
上文链接:http://zxlmdonnie.cn/archives/springcloudru-men
6. Gateway 服务网关
注意:Spring Cloud Gateway 本质上也是个微服务!
Spring Cloud Gateway 具有三个核心功能:
权限控制:网关作为微服务入口,需要校验用户是否有请求资格,如果没有则进行拦截;
路由与负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。
限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。
我们的 elevator-gateway
模块目录如下:
大致可分为以下几个模块:
配置文件:
pom.xml.yml
文件等过滤器:
filter
Swagger 核心配置
swagger
与安全框架有关的配置
security
启动类
GateWay
配置文件简介
pom.xml
如果是我们自己新建的一个项目,还需要引进注册中心依赖:
bootstrap-dev.yml 关于此模块部分核心配置如下:
大体分模块如下:跨域配置、网关配置、路由策略配置
跨域配置、网关配置很好理解,gateway 的核心其实是在路由策略:
核心配置:路由策略
我们将符合Path
规则的一切请求,都代理到 uri
参数指定的地址。
本例中,即为将 /unit/**
开头的请求,代理到 lb://elevator-unit
,lb是负载均衡,根据服务名拉取服务列表,实现负载均衡。
现在我们把这两个模块运行起来:
打开本模块的 Swagger-ui:http://localhost:7983/swagger-ui/
随便找到一个接口测试,如:
由于前缀路径 /unit
在过滤器中被去掉,请求被转发到了:http://elevator-unit/dictionary/city?provinceId=0,而elevator-unit模块在localhost:8080,即转发到:
均可查看到相同的返回结果:
Swagger 配置
GateWay 的 Swagger3.0 相关配置 代码by王梓 留档备用。
全局过滤器配置
过滤器分两种:
路由过滤器:在yml文件
routes.filter
中配置,处理逻辑固定全局过滤器:实现
GlobalFilter
接口
本项目实现这个接口是作为安全框架的善后。
我们只需关注所有 return
语句:
放行:
return chain.filter(exchange);
安全框架
ResourceServerConfig
为资源服务器配置。
ResourceServerManager
实现了接口 ReactiveAuthorizationManager<AuthorizationContext>
为网关自定义鉴权管理器。
7. 微服务方面设计:Ha-Pancake
项目架构设计阶段
基本模块框架搭建
common
auth
gateway
:使得每个项目都可以独立运行主方法SpringApplication.run()
创建 git 仓库与 README.md
建立示例项目模块,进行
example
实体相关 CRUD配置网关、远程调用、安全框架(可以进行注册、登录开发)
配置注册中心、负载均衡、配置中心、Swagger-UI
进一步优化:安全框架Auth逻辑、自动化部署、配置中心继续优化 ……
建立模块
创建Maven父工程,配置
pom.xml
的dependencymanagement
。创建Maven子工程
被依赖工程(如
common
xxx-client
模块),配置pom.xml
的相关依赖含启动类工程(如
auth-api
system-api
模块),配置pom.xml
相关依赖,并引入本项目的被依赖工程,最后配置build
属性,在打包时包含依赖并指定启动类。
配置依赖时,可以参考 https://start.aliyun.com/
阿里云官方云原生脚手架,可以复制
pom.xml
进行相关配置注意父子工程的依赖关系、ArtifactId、groupName等字段
配置网关、远程调用、安全框架
关于三者结合,最后要实现的效果如下:
Gateway:进行路由转发 配置过滤器,可以路由转发到Auth、System、Example 模块
Auth:进行权限认证,在这里进行
token
生成操作System:在这里进行用户的CRUD
Example:进行注册登录拿到权限后,方能访问该模块。
参考
黑马程序员 SpringCloud 课程 https://www.bilibili.com/video/BV1kH4y1S7wz
若维电梯项目 elevator-backend https://ruoweiedu.com/
SpringCloud:Gateway之StripPrefix使用 https://blog.csdn.net/yunyala/article/details/133152704
2024春季练手项目哈大饼之Ha-Islet组 https://github.com/Werun-backend/Ha-Islet