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
相关推荐
炸裂狸花猫14 小时前
Kubernetes从零到精通(12-Ingress、Gateway API)
容器·kubernetes·gateway
云来喜2 天前
关于Spring Cloud Gateway中 Filters的理解
java·spring boot·gateway
小小小小关同学2 天前
【Gateway】网关服务快速上手
java·开发语言·gateway
小小小小关同学3 天前
【Gateway】Gateway Filter Factories
网络·gateway
两仪式quq3 天前
服务网关Gateway快速入门
服务器·网络·gateway
szc17675 天前
Gateway学习笔记
笔记·学习·gateway
huaqianzkh8 天前
什么是API网关(API Gateway)?
架构·gateway
亚林瓜子8 天前
Spring Cloud Gateway中的常见配置
spring·spring cloud·gateway
c1tenj28 天前
SpringCloud gateway
gateway
潘多编程8 天前
Gateway Timeout504: 网关超时的完美解决方法
gateway