【Cloudgetway网关】 GetWay网关入门使用

一、概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ow0KO8iV-1686286922163)(null)]

GateWay是zuul的替代品,由于Zuul2.0迟迟没有出来,SpringCloud社区推出了gateWay网关来替代zuul1.x版本。提供了以下功能: 底层使用netty通讯

  • 反向代理

  • 鉴权

  • 安全

  • 监控、指标

  • 限流

    GateWay具有以下特征: 基于Spring,PR,SpringBoot构建

  • 动态路由

  • 集成hystrix断路器功能

  • 路径重写

  • 请求限流等功能

  • 断言和过滤器

1. 非阻塞异步模型

​ Getway是基于异步非阻塞模型上进行开发,性能更优秀。

  • 阻塞处理模型就是: 当请求进入ServletContainer,它就会为之绑定一个线程,这种模型只适合用于并发不高的情况。Zuul1.x就是基于这么一个阻塞式处理模型。

    Servlet3.1之后有异步非阻塞的支持,webFlux就是基于这么个框架,他的核心就是基于Reactor相关的实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wm6RKKXq-1686286919028)(C:\Users\JaneOnly\AppData\Roaming\Typora\typora-user-images\image-20221128170458657.png)]

2. 三大概念

路由Route

路由是构建网关的基本模块,由ID,和目标URI,和一系列断言和过滤器组成,如果断言为True则匹配该路由。

浅浅可以与Vue的路由概念相理解

断言Predicate

断言就是Java8中Java.utils.function.Predicate,匹配Http请求中的内容,如果请求与断言相互匹配,则进行路由转发到微服务。

过滤Filter

GatewayFilter的实例,使用过滤器,在请求被路由转发之前或者之后对请求进行修改

like ServletFilter: beforeFilter doAction afterFilter

  1. 客户端向GateWay请求,先通过网关中断言
  2. 在进行n层过滤器
  3. 最后根据目标uri访问对应的微服务

image-20230527151751512

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hx3i9eBP-1686286922136)(null)]

总结gateway的作用就是路由转发+执行过滤链

二、入门配置

1. 基础配置

1.1 Yaml方式

使用gatway网关,来访问8001的微服务

  1. 建立Pom
<!--gateway-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--eureka-client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 修改YAML

由于网关也是一种微服务,因此也需要注册进入服务注册中心;

server:
  port: 9527

spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
        - id: payment_routh #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://localhost:8001          #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/circuitBreak/**         # 断言,路径相匹配的进行路由

        - id: payment_routh2 #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://localhost:8001          #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/ok/**         # 断言,路径相匹配的进行路由

eureka:
  instance:
    hostname: cloud-gateway-service
  client: #服务提供者provider注册进eureka服务列表内
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka
  1. 启动网关和8001微服务,使用9527端口进行访问;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o8wVKlev-1686286922174)(null)]


1.2 硬编码方式配置路由

image-20230529101903517

2. 通过微服务实现动态路由

通过上面的案例中,出现了两个问题

  • 路由地址是硬编码方式
  • 微服务中可能有多台机器,没有实现负载均衡

我们可以通过修改Yaml,实现动态路由来解决以上两个问题。

  1. 开启动态路由
  2. 将 uri 改成 lb: //{微服务名称}
  cloud:
    gateway:
      routes:
        - id: payment_routh #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
         # uri: http://localhost:8001          #匹配后提供服务的路由地址
          uri: lb://CLOUD-HYSTRIX-PAYMENT/
          predicates:
            - Path=/payment/circuitBreak/**         # 断言,路径相匹配的进行路由

        - id: payment_routh2 #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
          #uri: http://localhost:8001          #匹配后提供服务的路由地址
          uri: lb://CLOUD-HYSTRIX-PAYMENT/
          predicates:
            - Path=/payment/ok/**         # 断言,路径相匹配的进行路由
      discovery:
        locator:
          enabled: true #开启识别动态路由

3. Predicate使用

​ 在官方自带的断言有11种

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VlMwvJvV-1686286922187)(null)]

以上各种RoutePredicateFactory都代表了HTTP请求中不同属性值,之间都可以进行组合,并且通过逻辑AND进行断言匹配。

3.1 After

匹配时间: ZonedDateTime

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6EuUVhQu-1686286919029)(C:\Users\JaneOnly\AppData\Roaming\Typora\typora-user-images\image-20221128211153223.png)]

3.2 cookie

  • 匹配是否有Cookie,若有,匹配成功,否则拒绝访问。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jOOQ3DKM-1686286919029)(C:\Users\JaneOnly\AppData\Roaming\Typora\typora-user-images\image-20221128213100527.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNvO7sFW-1686286919030)(C:\Users\JaneOnly\AppData\Roaming\Typora\typora-user-images\image-20221128213157753.png)]

3.2 Header

  • 匹配中检测是否有请求头,若有匹配成功,否则拒绝访问。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JON9M7x9-1686286919030)(C:\Users\JaneOnly\AppData\Roaming\Typora\typora-user-images\image-20221128213331414.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NpDwlLJb-1686286919030)(C:\Users\JaneOnly\AppData\Roaming\Typora\typora-user-images\image-20221128213426307.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-69ll88c0-1686286919030)(C:\Users\JaneOnly\AppData\Roaming\Typora\typora-user-images\image-20221128213459763.png)]

3.3 Method

  • 匹配请求方式GETPost等等。

predicate就是为了实现一组匹配规则,让请求过来找到对应的route进行处理。

4. Filter

使用过滤器,可以在路由转发请求前,或者请求后,对请求进行一定的修改,也就是可以修改进入的HTTP请求和返回的HTTP相应,路由过滤器只能指定路由进行使用。

  • 生命周期-pre|post
  • 种类-GetwayFilter|GlobalFilter

根据官网文档,添加配置:

简单实例:

yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgQUxGVh-1686286922201)(null)]

自定义过滤器**

可以进行全局日志记录,同一网关鉴权等…

  1. 实现两个接口 GlobalFilter,Ordered
@Component
public class MyLoagGatewayFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String uname = exchange.getRequest().getQueryParams().getFirst("uname");
        if(uname == null){
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    /**
     * 优先级
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}

测试:

不带uname访问:

image-20230529103844592

带着uname访问成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wiEmVJhl-1686286922148)(null)]

  1. 重写两个方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网关(Gateway)是一个在网络中充当中转站的服务器,它可以连接不同的网络、协议或者服务,并提供一些功能和服务来增强网络的安全性、性能和可靠性。网关的作用有以下几个方面: 1. 路由转发:网关可以根据不同的目标地址,将请求转发到不同的网络或者子网中,实现网络之间的连接。 2. 协议转换:网关可以将一个协议的请求转换成另一个协议的请求,使得不同的系统或者服务能够互相通信。例如,将HTTP请求转换成HTTPS请求。 3. 安全认证与授权:网关可以对请求进行身份认证和授权,确保只有合法的用户能够访问受保护的资源。它可以实现用户身份验证、访问控制、API密钥管理等功能。 4. 流量控制与限流:网关可以对请求进行流量控制和限流,防止恶意攻击或者过多的请求导致系统负载过高。它可以实现访问频率限制、并发连接数控制等功能。 5. 缓存与加速:网关可以缓存一些常用的数据或者响应结果,提高系统的性能和响应速度。它可以减少对后端服务的请求压力,加速数据的传输和处理。 6. 监控与日志:网关可以对请求和流量进行监控和记录,收集系统的运行数据和日志信息,用于故障排查、性能优化和安全审计。 总而言之,网关在网络中起到了连接、转发、安全、控制和加速等多个方面的作用,为系统提供了更好的可用性、性能和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值