SpringCloud——GateWay入门

2023-11-13

客户由发送请求由Nginx服务器已经将请求转发到一个服务器上,但是服务之前我们还需要一个网关将这些请求进一步加工处理到服务上,这一步就是GateWay.

GateWay

1.GateWay服务是不需要进入以下jar包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.GateWay是基于异步非阻塞模型上开发的;zuul1基于servlet2.5使用阻塞模型开发。
3.Spring Cloud Gateway具有如下特性::
①:动态路由:能够匹配任何请求属性;
②:可以对路由指定Predicate (断言)和Filter (过滤器);
③:集成Hystrix的断路器功能;
④:集成Spring Cloud服务发现功能;
⑤:易于编写的Predicate(断言)和Filter (过滤器);
⑥:请求限流功能;
⑦:支持路径重写。
3…GatWay的三大核心概念:
①:Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如断言为true则匹配该路由
②:Predicate(断言):可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
③:Filter(过滤):可以在请求被路由前或者之后对请求进行修改.
4.GatWay工作流程:客户端向Spring Cloud Gateway发出请求。然后在Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到GatewayWeb Handler;Handler再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。
5.predicate就是我们的匹配条件;而filter就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就可以实现一个具体的路由。
6.GatwWay的两种配置方法
application.yml配置文件

server:
  port: 9527
  
eureka:
  instance:
    hostname: cloud-gateway-service
  client:
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka
      
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true  #开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:
        - id: payment_routh #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
          #uri: http://localhost:8081          #匹配后提供服务的路由地址
          uri: lb://cloud-payment-service #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/get/**         # 断言,路径相匹配的进行路由

        - id: payment_routh2 #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
          #uri: http://localhost:8081          #匹配后提供服务的路由地址
          uri: lb://cloud-payment-service #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/lb/**         # 断言,路径相匹配的进行路由
            #- After=2020-12-11T22:01:00.869+08:00[GMT+08:00]
            #- Cookie=username,charon
            #- Header=X-Request-Id, \d+  # 请求头要有X-Request-Id属性并且值为整数的正则表达式
            #- Method=GET
            #- Query=username, \d+ #要有参数名username,值必须为整数才能路由 (可以只写一个参数名不带值)
          #filters:
            #- AddRequestHeader=X-Request-Id, 1024 #过滤器工厂会在匹配的请求头上加一对请求,名称为X-Request-Id值为1024

JavaBean注入

@Configuration
public class GateWayConfig {


    /**
     * 配置一个id为path_route_charon路由规则,
     * 当访问http://localhost:9527/guonei是自动跳转到http://news.baidu.com/guonei
     * @param routeLocatorBuilder
     * @return
     */
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
        routes.route("path_route_charon",r ->
            r.path("/guonei").uri("http://news.baidu.com/guonei")
        ).build();
        routes.route("path_route_charon2",r ->
                r.path("/guoji").uri("http://news.baidu.com/guoji")
        ).build();
        return routes.build();
    }
}

7.默认情况下Gatway会根据注册中心注册的服务列表, 以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能
8.常用的Route Predicate:
一:After Route Predicate :
二:Before Route Predicate :
三:Between Route Predicate :
四:Cookie Route Predicate (带上cookie):
五:Header Route Predicate :
六:Host Route Predicate:
七:Method Route Predicate:
八:Path Route Predicate:
九:Query Route Predicate:
十:RemoteAddr Route Predicate:
十一:Weight Route Predicate:
补充:使用方式可以查看上面配置文件和下例图片:
在这里插入图片描述
在这里插入图片描述

9.Filter生命周期:prepost
过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等。在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。
10.种类:GateWayFilterGlobalerFiter
GlobalerFiter是对于请求进行过滤筛选

@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("***********come in MyLogGateWayFilter:  "+new Date());
        String username = exchange.getRequest().getQueryParams().getFirst("username");
        if(StringUtils.isBlank(username)){
            log.info("*******用户名为null,非法用户,禁止进入");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    /**
     * 加载过滤器的顺序 一般数字越小优先级越高
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringCloud——GateWay入门 的相关文章

随机推荐

  • pyechart基本绘图(python)

    charts base 基本图表篇 本篇文档为 pyecharts 基本图表详情文档 介绍了关于 pyecharts 各类基本图表的细节 图表详细配置请参考 图表配置篇 基本图表类 Bar 柱状图 条形图 Bar3D 3D 柱状图 Boxp
  • STM32使用HAL库中外设初始化MSP回调机制及中断回调机制详解

    STM32使用HAL库之Msp回调函数 1 问题提出 在STM32的HAL库使用中 会发现库函数大都被设计成了一对 HAL PPP PPPP Init HAL PPP PPPP MspInit 而且HAL PPP PPPP MspInit函
  • 统计学学习笔记:L1-总体、样本、均值、方差

    目录 一 总体和样本 二 集中趋势分析 2 1 均值 2 1 1 样本均值 2 1 2 总体均值 2 2 众数 中位数 三 离散趋势分析 3 1 总体方差 3 2 样本方差 3 3 标准差 一 总体和样本 比如要计算全国男性的平均身高 但是
  • 国内首个生成式AI标准发布,aiXcoder为核心编写单位

    3月20日 首届生成智能产业峰会在北京成功举办 aiXcoder凭借其在生成式人工智能技术方面的卓越表现 被评选为核心编写单位 深度参与 生成式人工智能技术及产品评估方法 系列标准的研制和发布 万物智生 百业赋能 首届生成智能产业峰会于3月
  • c语言逐行存储到txt,c语言逐行读取txt文件数据

    我写的是linux下的程序 一个文件叫MYFILE里面是一行一行的写内容的 我可以使用fgets函数 1 函数名 fgets 2 声明 char fgets char buf int bufsize FILE stream 3 头文件 st
  • Android JNI2--C++基础

    1 基础结构 C 标准支持 include
  • MATLAB之极坐标绘图

    目标是要绘制一个二维的极坐标彩色图 输入参数有三个 一个是角度 一个是半径 一个是颜色 说到极坐标绘图 第一个想到的就是polar啦 那就先试试吧 1 polar绘图 polar函数用来绘制极坐标图 调用格式为 polar theta rh
  • 数据结构-最小生成树、prim算法、kruskal算法

    目录 最小生成树 Prim算法 普里姆 Kruskal算法 科普斯卡尔 prim算法的实现思想 Kruskal算法的实现思想 最小生成树 如果一个连通图本身就是一棵树 则其最小生成树就是它本身 只有连通图才有生成树 非连通图只有生成森林 P
  • telnet 使用教程(新手篇)及问题集锦

    telnet经常用于测试网络及端口占用情况 具体使用如下 测试端口命令 telnet host 端口 例 telnet 192 168 31 100 8081 连接失败表示端口未占用 否则表示被占用 如下 8080端口已占用 例 telne
  • RACI模型

    1 什么是RACI模型 释义 RACI是一个相对直观的模型 用以明确组织变革过程中的各个角色及其相关责任 我们知道 变革过程是不可能自发或者自动进行的 必须有人对其进行作用 促使进程发生变化 因而 就很有必要对谁做什么 以及促发什么样的变革
  • dracut 使用笔记

    dracut 维基 https dracut wiki kernel org index php Main Page dracut 官方手册 https www kernel org pub linux utils boot dracut
  • luaframework框架中将protobuf文件转成lua文件

    在luaframework框架中提供了通讯工具protobuf 需要将protobuf文件转成lua文件使用 按步骤来 1 下载并安装Python 我下载的版本是2 7 8 这个去Python官网下载即可 我的Python安装目录如图 2
  • Mybatis-plus 集合分页方法

    一 静态分页 1 POM引用
  • 使用matplotlib做动态排名图

    数据源 数据 过程 1 将数据进行持久化存储 先使用pandas的read csv函数从网页端直接读取数据 并筛选部分数据 url https gist githubusercontent com johnburnmurdoch 4199d
  • 【网页设计】HTML+CSS 实现简单宣传网页设计展示

    网站设计包含 1 图片设计 有背景图片和颜色 同时有一张图片悬浮 2 字体设计 设置字体大小 颜色等内容 3 按钮设计 完成点击按钮后弹出视频窗口的功能 4 视频窗口 视频窗口包括视频进度条 调节音量 窗口全屏 调节视频播放速度以及画中画等
  • NetworkManager和network

    一 NetworkManager做了什么 NetworkManager确保网络连接正常 当检测到系统中没有网络配置但有网络设备时 NetworkManager会创建临时连接以提供连接 通过不同的工具 GUI nmtui nmcli 提供管理
  • 操作系统 页面置换算法:LRU和FIFO

    LRU Least Recently Used 最少使用页面置换算法 顾名思义 就是替换掉最少使用的页面 FIFO first in first out 先进先出 页面置换算法 这是的最早出现的置换算法 该算法总是淘汰最先进入内存的页面 即
  • flutter Image图片控件-知识点

    图片是大家做项目中常用最大控件之一 本篇针对项目中经常用的功能 做些总结 ImageProvider 是一个抽象类 主要定义了图片数据获取的接口load 从不同的数据源获取图片需要实现不同的ImageProvider 如AssetImage
  • Linux搭建SVN服务器

    1 安装SVN 官网下载 http subversion apache org packages html SVN客户端 TortoiseSVN 官网下载 http tortoisesvn net downloads html yum in
  • SpringCloud——GateWay入门

    客户由发送请求由Nginx服务器已经将请求转发到一个服务器上 但是服务之前我们还需要一个网关将这些请求进一步加工处理到服务上 这一步就是GateWay GateWay 1 GateWay服务是不需要进入以下jar包