1 网关是我们服务的守门神,,所有服务的唯一入口
网关的核心功能特性:
- 请求限流
- 路由
- 权限控制(验证用户的信息)

- 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。
- 路由和负载均衡,一切请求都需要经过网关,但是网关不处理业务,只对请求验证,根据某种规则 把请求转发到对应的服务
- 限流:当请求流量过高时,在网关中 按照服务能接受的请求速度来做相应的处理,使服务能正常运行,避免压力过大
- springcloud中网关中实现有2种 一种是zuul,一种是gateway zuul是基于servlet的实现 属于阻塞式编程,而gateway是属于响应式编程 异步非阻塞 效率高
- 开发流程
- 引入依赖gateway 和 discovery服务发现依赖 因为网关需要去注册中心拉取服务 实现负载均衡调用,
- 编写网关的配置:
server:
port: 10086
spring:
application:
name: getaway
cloud:
nacos:
server-addr: nacos:8848
discovery:
cluster-name: beijing
namespace: 7b2cd09d-d581-4f01-8e3e-0c13a4190fac
gateway:
routes:
- id: order-service # 路由id,自定义,只要唯一即可
# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
_uri: lb://orderservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
- Path=/order/** # 这个是按照路径匹配,只要以/user/开头就符合要求
#- Query=name,jack
filters:
- AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头_
如果有跨域 需要配置跨域
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 # 这次跨域检测的有效期_
路由的配置:id 路由的唯一标识
uri:路由的目标地址:lb 代表负载均衡
路由断言(pridicates) 对 路由的断言
路由过滤器:(filter)对请求或者响应的过滤
- 断言工厂 : 常用断言工厂Path 路径 - path=/user/** 必须满足这路径才能访问
- 过滤器:spring提供了31种过滤器 常用的有 filter - striapprefix =1 表示吧路径的第一个去掉
- 全局过滤器 实现globle 接口 常用 这个可以自己编写过滤的逻辑
- 代码: public class MygolableFilter Implements GloableFilter{
- publice Momo
filter(serverWebexchange exchange,GatewayFilterchian chain){ - if(){
- return chain.filter.(exchange)}
- }
- return exchange.getrespnose().complate()
- }
@order()注解是控制连接器执行流程 值越小 前置执行优先级越高 后置越低
令牌桶实现限流 (网关限流): 常见限流算法:” 计数器算法,漏桶算法,令牌通算法
- **令牌桶 实现原理: 准备一个令牌桶工厂 持续生成令牌 准备一个固定容量的令牌桶,每一个请求都需要获取到令牌才可以访问, 否则就拒绝服务
**
