当前位置: 首页 > news >正文

统一网关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:loadBlancepredicates: # 路由断言, 也就是判断请求是否符合路由规则的条件- 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:限制请求的流量
…等等

总结:
过滤器的作用是什么?

  1. 对路由的请求或响应做加工处理,比如添加请求头
  2. 配置在路由下的过滤器只对当前路由的请求生效
    defaultFilter的作用是什么?
    对所有路由都生效的过滤器
http://www.lryc.cn/news/22697.html

相关文章:

  • 6、kubernetes(k8s)安装
  • python-批量下载某短视频平台音视频标题、评论、点赞数
  • 【数据结构与算法】单链表的增删查改(附源码)
  • 华为OD机试 - 回文字符串
  • C语言太简单?这14道C语言谜题,你能答对几个
  • Benchmark测试——fio——源码分析
  • 测量 R 代码运行时间的 5 种方法
  • Qt 第9课、计算器中缀转后缀算法
  • docker的使用方法
  • Kafka(五)生产者向发送消息的执行流程
  • 华为OD机试模拟题 用 C++ 实现 - 简易压缩算法(2023.Q1)
  • MATLAB R2022b 安装教程
  • PCI子系统
  • Spring源码之IoC容器的Bean创建和依赖注入,DefaultListableBeanFactory容器为例
  • 解决小程序页面scroll-view块自身滑动问题
  • PowerCommand康明斯发电机控制屏维修HMI211
  • ELK + Kafka 测试
  • 迁移系统:换电脑或者硬盘转移磁盘文件的方法!
  • 职场性别报告,男女薪酬仍有差距,男性平均薪酬比女性高29.7%
  • 5-Azidopentanoic acid,79583-98-5,5-Azidopentanoic COOH具有高效稳定,高特异性
  • 滴滴前端高频react面试题汇总
  • 能在软路由docker给部署搭建teamsperk服务器么?并且设置好ddns
  • 应用统计学实验1-蒙特卡罗方法求解定积分
  • 用Pyhon编写一个属于自己的nmap
  • 电信网上用户资管理系统的设计与实现
  • js函数柯里化-面试手写版
  • 【学习笔记】深入理解JVM之类加载机制
  • 驾驭云端之风1——Spring Cloud微服务架构实践指南
  • 【计算机网络基础】
  • grep与nm命令的应用