Gateway服务网关

一.为什么需要服务网 关

两大特性:高可用和高性能

1、高性能:采用异步的方式调用服务。

在服务的调用方式上面,网关也有一定的要求,API 网关最好是支持 I/O 异步、同步非阻塞的,如果服务是同步阻塞调用,可以理解为微服务模块之间是没有彻底解耦的,即如果A依赖B提供的API,如果B提供的服务不可用将直接影响到A不可用,除非同步服务调用在API网关层或客户端做了相应的缓存。因此为了彻底解耦,在微服务调用上更建议选择异步方式进行。而对于 API 网关需要通过底层多个细粒度的 API 组合的场景,推荐采用响应式编程模型进行而不是传统的异步回调方法组合代码,其原因除了采用回调方式导致的代码混乱外,还有就是对于 API 组合本身可能存在并行或先后调用,对于采用回调方式往往很难控制。

2、高可用

二、网关包含三大属性

路由 Route:

Route 主要由 路由id、目标uri、断言集合和过滤器集合组成,那我们简单看看这些属性到底有什么作用。

(1)id:路由标识,要求唯一,名称任意(默认值 uuid,一般不用,需要自定义)

(2)uri:请求最终被转发到的目标地址

(3)order: 路由优先级,数字越小,优先级越高

(4)predicates:断言数组,即判断条件,如果返回值是true,则转发请求到 uri 属性指定的服务中

(5)filters:过滤器数组,在请求传递过程中,对请求做一些修改或对返回做一些修改

断言 Predicate:

Predicate 来自于 Java8 的接口。Predicate 接受一个输入参数,返回一个布尔值结果。Spring Cloud Gateway 内置了许多 Predicate ,这些 Predicate 的源码在 org.springframework.cloud.gateway.handler.predicate 包中,有兴趣可以阅读一下。内置的一些断言如下图:

过滤器 filter:

1、生命周期:

PRE:前置过滤器(2)基本上都带Request单词,这种过滤器在请求被路由目标服务之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。

POST:后置过滤器(4)基本上都带Response单词,这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

2、作用范围

局部过滤器: GatewayFilter:应用到单个路由或者一个分组的路由上(需要在配置文件中配置

全局过滤器: GlobalFilter:应用到所有的路由上(无需配置,全局生效

三、基本配置

XML 复制代码
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-webflux</artifactId>
 </dependency>
 <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
      <version>2.2.2.RELEASE</version>
 
</dependency>
XML 复制代码
spring:
  application:
    name: gateway-app
  cloud:
    gateway:
      routes:
        - id: httpbin
          uri: https://httpbin.org
          predicates:
            # 匹配路径
            - Path=/abc/**
             # 匹配请求参数  \d+ 表示数字
   #         - Query=id,\d+
            # 匹配请求方法
 #           - Method=GET
             # 匹配请求头
 #           - Header=X-Request-Id, \d+
          filters:
            # 在请求目标uri之前,截取路径上面的占位路径的个数
            - StripPrefix=1
            - AddRequestHeader=token, 123456
相关推荐
wenyue11213 小时前
Revolutionize Your Kubernetes Experience with Easegress: Kubernetes Gateway API
容器·kubernetes·gateway
木子_lishk5 小时前
gateway 支持同时使用 https 和 http访问
https·gateway
一元咖啡5 小时前
SpringCloud Gateway转发请求到同一个服务的不同端口
spring·spring cloud·gateway
wclass-zhengge2 天前
SpringCloud篇(服务网关 - GateWay)
spring boot·spring cloud·gateway
H愚公移山H2 天前
Spring Cloud Alibaba [Gateway]网关。
java·gateway·springcloud
醇氧2 天前
【spring 】Spring Cloud Gateway 的Filter学习
学习·spring·gateway
蚰蜒螟2 天前
Spring gateway 路由 配置在数据库
数据库·spring·gateway
因我你好久不见3 天前
解决绿盟漏洞扫描 gateway、nacos、springboot tomcat检测到目标主机可能存在缓慢的HTTP拒绝服务攻击问题
spring boot·http·gateway
moxiaoran57536 天前
搭建Spring gateway网关微服务
spring·微服务·gateway
飞天大拖把6 天前
Zuul和GateWay
gateway