统一网关Gateway
Posted MyAzhe0ci3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统一网关Gateway相关的知识,希望对你有一定的参考价值。
为什么需要网关
网关功能:
- 身份认证和权限校验
- 服务路由,负载均衡
根据请求判断找到对应的服务路由,然后服务可能有多个实例,这个时候网关就会做一个负载均衡去挑选一个实例调用. - 请求限流
限制请求的数量,这是微服务的一种保护措施
网关的作用就是实现对微服务的保护
网关的技术实现
在SpringCloud中网关的实现包括两种
- getway
- zuul
Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式变成的实现,具有更好的性能
搭建网关服务
搭建网关服务的步骤:
1.创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖
<!--网关依赖-->
<dependency>
<groudId>org.springframework.cloud</groudId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
<groudId>com.alibaba.cloud</groudId>
<artifactId>spring-cloud-starter-alibaba-discovery</artifactId>
</dependency>
2.编写路由配置及nacos地址
server:
port:10010 #网关端口
spring:
application:
name: gateway #服务名称
cloud:
nacos:
server-addr: localhost:8848# nacos地址
gateway:
routes: #网关配置
- id: user-service #路由id,自定义,只要唯一即可
uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称 lb:loadBlance
predicates: # 路由断言, 也就是判断请求是否符合路由规则的条件
- Path=/user/ ** # 这个是按照路径匹配,只要以/user/开头就符合要求
Tip: nginx是用户到前端的网关,gateway是前端到后端的网关,一个是对内网关,一个是对外网关
总结:
1.创建项目,引入nacos服务发现和gateway依赖
2.配置application.yml,包括服务基本信息,nacos地址,路由
路由配置包括:
1.路由id:路由的唯一标识
2.路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
3.路由断言(predicates):判断路由的规则
4.路由过滤器(filters):对请求或响应做处理
路由断言工厂Route Predicate Factory
- 我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断条件
- 例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.getway.handler.predicate.PathRoutePredicateFatory类来处理的
- 像这样的断言工厂在SpringCloudGateway还有十几个
总结:
-
PredicateFactory的作用是什么?
读取用户定义的断言条件,对请求做出判断 -
Path=/user/**是什么含义?
路径是以/user开头的就认为是符合的
路由过滤器GatewayFilter
GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:
过滤器工厂 GatewayfilterFactory
Spring提供了31种不同的过滤器工厂。例如:
AddRequestHeader:给当前请求添加一个请求头
RemoveRequestHeader:一处请求中的一个请求头
AddesponseHeader:给相应结果中添加一个响应头
RemoveResponseHeader:从响应结果中移除有一个响应头
RequestRateLimiter:限制请求的流量
…等等
总结:
过滤器的作用是什么?
- 对路由的请求或响应做加工处理,比如添加请求头
- 配置在路由下的过滤器只对当前路由的请求生效
defaultFilter的作用是什么?
对所有路由都生效的过滤器
以上是关于统一网关Gateway的主要内容,如果未能解决你的问题,请参考以下文章
06-手机登录&token生成&容联云短信验证&用户认证和网关整合(网关做统一权限认证)