API网关之Spring Cloud Gateway(一)

API网关之Spring Cloud Gateway 的实践Spring Cloud Gateway 介绍Spring Cloud Gateway 是Spring 官方基于Spring5.0、Spring Boot 2.0 和Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单有效的、统一的API路由管理方式。目的是为了替换N...
摘要由CSDN通过智能技术生成

API网关之Spring Cloud Gateway 的实践

Spring Cloud Gateway 介绍

Spring Cloud Gateway 是Spring 官方基于Spring5.0、Spring Boot 2.0 和Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单有效的、统一的API路由管理方式。目的是为了替换Netfix Zuul ,它不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等。
Spring Cloud Gateway 依赖Spring Boot 和 Spring WebFlux,基于Netty 运行。它不能再传统的servlet 容器中工作,也不能够建成war包。
Spring中核心的概念:
1.Route
Route是网关的基础元素,由ID、目标URI、断言、过滤器组成。当请求到达网关时,由Gateway Handler Mapping 通过断言进行路由匹配(Mapping),当断言为真时,匹配到路由。
2.Predicate
Predicate 是java8中提供的一个函数。输入类型是Spring Framwork ServerWebExchange。它允许开发人员匹配来自Http的请求,例如请求头或者请求参数。简单理解就是匹配条件。
3.Filter
Filter是Gateway中的过滤器,可以再请求发出前后进行一些业务上的处理。

Spring Cloud Gateway 工作原理

Spring Cloud Gateway 的工作原理和Zuul差不多,最大的区别就是Gateway的Filter只有pre 和post两种。下面我们简单了解一下Gateway的工作原理,如下图所示。

Spring Cloud Gateway 工作原理

客户端向Spring Cloud Gateway 发出请求,如果请求与网关定义的路由匹配,则该请求就会被发送到官关Web处理程序,即运行特定的请求过滤器链。(pre先执行,post后执行)

Spring Cloud Gateway 快速上手

创建Gateway项目
创建一个Spring Boot 的Maven 项目,增加Spring Cloud Gateway 的依赖,启动类是正常的SpringBoot方式,如下代码:

Spring Cloud Gateway Maven 依赖
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.0.6.RELEASE</version>
        <relativePath/>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>spring-cloud-gateway</artifactId>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>
Spring Cloud Gateway 启动类
@SpringBootApplication
public class GatewayApplicaption {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplicaption.class, args);
    }
}
路由转发示例
基于Path的匹配转发。配置文件如下:
server:
  port: 10093
spring:
  cloud:
    gateway:
      routes:
        - id: path_route
          uri:http://gdscloud.com
        predicates:
          - Path=/spring
当你访问http://localhost:10093/spring 的时候会转发到http//gdscloud.com/spring。如果需要支持多级Path,配置方式和Zuul 一样,在后面加上两个*号即可,比如 *-Path=/spring/***。
整合Eureka路由
添加Eureka Client 的依赖,如下:
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
配置基于Eureka 的路由:
		- id: user-service
          uri:lb://user-service
        predicates:
          - Path=/user-service/**
uri以lb://开头(lb代表从注册中心获取服务),后面是你需要转发到的服务名称,这个服务名称必须跟Eureka中的对应,否则就会找不到服务,报错。
整合Eureka的默认路由
Zuul会对所有服务都进行转发操作,只需要在访问路径指定访问的服务即可,gateway也可以,配置如下:
spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
开启之后,访问服务格式如下:
http://网关地址/服务名称(大写)/**
http://localhost:10093/USER-SERVICE/user/get?id=1
服务名称大写修改,增加配置  lower-case-service-id: true
服务名称大小写,二者只能选其一

Spring Cloud Gateway 路由断言工厂

Spring Cloud Gateway 路由工厂的使用
Spring Cloud Gateway 内
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值