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
相关推荐
shamalee2 天前
Nginx反向代理出现502 Bad Gateway问题的解决方案
运维·nginx·gateway
xiaolingting2 天前
Gateway 网关流控与限流架构指南
spring cloud·架构·gateway·sentinel
无级程序员2 天前
k8s v1.35配置gateway, istio通过metalb vip访问
kubernetes·gateway·istio
江畔何人初3 天前
Gateway API 的核心组件与作用
运维·网络·云原生·kubernetes·gateway
zklgin3 天前
Gateway Timeout504 网关超时的完美解决方法
gateway
WwW.-.4 天前
OpenClaw 技术解析:多渠道 AI Gateway 如何连接消息、Agent 与远程节点
网络·人工智能·gateway
@小匠5 天前
Spring-Gateway-理论知识总结/常问面试题
数据库·spring·gateway
胡斌附体5 天前
OpenClaw Gateway 代理问题排查记录
gateway·proxy·openclaw
大傻^5 天前
【OpenClaw -04】OpenClaw Gateway 架构:单一控制平面与 Agent 运行时模型
gateway·mcp·openclaw
坐吃山猪18 天前
OpenClaw04_Gateway常见问题
网络·gateway·openclaw