Spring Cloud Alibaba Gateway 简单使用

Spring Cloud Alibaba Gateway

1.Gateway简介

Spring Cloud Gateway是一个基于Spring Framework开发的反应式API网关,用于构建微服务架构中的网关服务。它提供了一种简单而有效的方式来路由、过滤和处理传入的请求,并与后端微服务进行交互。

Spring Cloud Gateway具有以下特点和功能:

  • 路由:可以根据请求的路径、方法、头部等信息将请求路由到不同的目标服务上。

  • 过滤:支持使用各种预定义的或自定义的过滤器对请求和响应进行处理,例如认证、鉴权、日志记录等。

  • 负载均衡:支持集成服务发现机制,并可通过负载均衡算法将请求分发到多个实例中。

  • 断路器:集成了断路器模式,可以在后端服务出现故障或超时的情况下进行熔断和降级处理。

  • 集成性:与Spring生态系统紧密集成,可以与Spring Boot、Spring Cloud Config、Eureka等组件无缝协作。

  • 反应式支持:基于Reactor提供异步、非阻塞的处理机制,具有更高的性能和可扩展性。

使用Spring Cloud Gateway可以有效地管理和组织微服务架构中的请求流量,提高系统的可伸缩性和可靠性。同时,它还提供了丰富的扩展点和配置选项,使开发人员能够根据自己的需求进行定制和扩展。

2. 流量网关和服务网关的区别

在这里插入图片描述

  • 流量网关:(如Nignx,OpenRest,Kong, Envoy)是指提供全局性的、与后端业务应用无关的策略,例如
    HTTPS证书认证、Web防火墙、全局流量监控,黑白名单等。
  • 服务网关:(如Spring Cloud
    Gateway)是指与业务紧耦合的、提供单个业务域级别的策略,如服务治理、身份认证等。也就是说,流量网关负责南北向流量调度及安全防护,微服务网关负责东西向流量调度及服务治理。

3. Spring Cloud Gateway 网关的搭建

3.1 Spring Cloud Gateway 配置项的说明

在介绍 Spring Cloud Gateway 的配置项之前,我们先了解几个 Spring Cloud Gateway 的核心术语:
路由(route):由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则转发到该路由。
断言(Predicate):参照 Java8 的新特性Predicate,允许开发人员匹配 HTTP 请求中的任何内容,比如请求头或请求参数或请求路径,最后根据匹配结果返回一个布尔值。
过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容。

  • 路由 Route:
    Route 主要由 路由id、目标uri、断言集合和过滤器集合组成,那我们简单看看这些属性到底有什么作用。
    (1)id:路由标识,要求唯一,名称任意(默认值 uuid,一般不用,需要自定义)
    (2)uri:请求最终被转发到的目标地址
    (3)order: 路由优先级,数字越小,优先级越高
    (4)predicates:断言数组,即判断条件,如果返回值是boolean,则转发请求到 uri 属性指定的服务中
    (5)filters:过滤器数组,在请求传递过程中,对请求做一些修改

  • 断言 Predicate:
    Predicate 来自于 Java8 的接口。Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
    Predicate 可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。Spring Cloud Gateway 内置了许多 Predict,这些 Predict 的源码在 org.springframework.cloud.gateway.handler.predicate 包中。

  • 过滤器 filter:
    Gateway 过滤器的生命周期:
    PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
    POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
    Gateway 过滤器从作用范围可分为两种:
    局部过滤器: GatewayFilter:应用到单个路由或者一个分组的路由上(需要在配置文件中配置)
    全局过滤器: GlobalFilter:应用到所有的路由上(无需配置,全局生效)
    内置局部过滤器 GatewayFilter:
    局部过滤器需要在指定路由配置才能生效,默认是不生效的。“AddResponseHeaderGatewayFilterFactory” 这个过滤器为例,为原始响应添加Header,配置如下

spring.cloud.gateway.routes[0].id=router1
spring.cloud.gateway.routes[0].uri=http://localhost:9024
spring.cloud.gateway.routes[0].predicates[0]=Path=/a/**
spring.cloud.gateway.routes[0].filters[0]=AddResponseHeader=Foo, Bar
#StripPrefix参数表示在将请求发送到下游之前从请求中剥离的路径个数。
spring.cloud.gateway.routes[0].filters[1]=StripPrefix=1

3.2 依赖导入

这里需要指定版本 spring boot的版本是2.3.11RELEASE

父模块

<parent>
        <groupId>com.hb</groupId>
        <artifactId>spring-cloud-root</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
 <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>

使用新的web依赖
在这里插入图片描述
导入依赖时发现
在这里插入图片描述

3.3 配置文件

# 配置路由
spring.cloud.gateway.routes[0].id = test
#这是显示请求详情的网址,同时也是本次被路由到的url
spring.cloud.gateway.routes[0].uri = http://httpbin.org
#配置断言 也就是本次可以被路由出的地址必须在test域名下
spring.cloud.gateway.routes[0].predicates[0] = Path=/test/**
# 配置截取二级目录 也就是  截取 http://httpbin.org/test/** 截取成为 http://httpbin.org/**
spring.cloud.gateway.routes[0].filters[0] = StripPrefix=1
#添加过滤请求时  请求头中添加一个参数
spring.cloud.gateway.routes[0].filters[1] = AddRequestParameter=aa,blue
#请求头中添加参数
spring.cloud.gateway.routes[0].filters[2] = AddRequestHeader=lianxu,shuai
#添加一个返回头
spring.cloud.gateway.routes[0].filters[3] = AddResponseHeader=kuailong,shuaidaile

响应结果

在这里插入图片描述
响应头
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring CloudSpring Cloud Alibaba都是基于Spring Framework的开源框架,用于构建分布式系统和微服务架构。它们都提供了一系列的组件和工具来简化微服务开发和管理。 Spring Cloud是一个由Pivotal团队维护的项目,它集成了Netflix开源的一些组件,如Eureka作为注册中心、Ribbon作为负载均衡器、Feign作为服务调用工具等。同时,Spring Cloud还提供了其他功能,如Config Server用于动态管理配置、Gateway用于构建API网关等。 而Spring Cloud Alibaba则是阿里巴巴开源的项目,它在Spring Cloud的基础上进行了扩展和定制,增加了一些阿里巴巴自己的组件和工具。比如,它使用Nacos作为注册中心和配置中心,使用Sentinel作为熔断降级工具。 总的来说,Spring CloudSpring Cloud Alibaba都是用于构建微服务架构的框架,它们的区别在于Spring Cloud集成了Netflix组件,而Spring Cloud Alibaba集成了阿里巴巴的一些组件。根据具体的需求和技术栈选择使用哪个框架可以更好地满足开发和管理微服务的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spring Cloud AlibabaSpring Cloud的区别](https://blog.csdn.net/weixin_43888891/article/details/126653270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值