Spring Cloud GateWay 路由转发实例及规则介绍

Spring在因Netflix开源流产事件后,在不断的更换Netflix相关的组件,比如:Eureka、Zuul、Feign、Ribbon等,Zuul的替代产品就是SpringCloud Gateway,这是Spring团队研发的网关组件,可以实现限流、安全认证、支持长连接等新特性。

Spring Cloud Gateway

Spring Cloud Gateway是SpringCloud的全新子项目,该项目基于Spring5.x、SpringBoot2.x技术版本进行编写,意在提供简单方便、可扩展的统一API路由管理方式。
概念解释:

  • Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
  • Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等。
  • Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。

Spring Cloud GateWay 工作流程如下所示:

Spring Cloud GateWay 路由转发实例及规则介绍_第1张图片
客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。此处理程序运行时通过特定于请求的筛选链发送请求。过滤器被虚线分隔的原因是过滤器可以在发送代理请求之前或之后执行逻辑。执行所有“预”过滤逻辑,然后发出代理请求。在发出代理请求后,将执行“post”过滤器逻辑。

开始实际例子
Spring Cloud Gateway目前有两种方式进行配置:

application.yml配置文件方式
通过@Bean注解RouteLocator方法返回值

在本章会侧重针对配置文件方式进行讲解,当然RouteLocator方式也会简单的告诉大家的使用方式。

添加依赖
添加Spring Cloud Gateway相关依赖,pom.xml如下所示:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
         
    
    com.cecurs.gateway
    gateway-service
    jar
    0.0.1-SNAPSHOT
    gateway-service
    Demo project for Spring Boot

    
        1.8
        Greenwich.SR3
    

    
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.projectlombok
            lombok
            true
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



Spring Cloud Gateway Predicates

在我们开始本章内容之前我们要来先了解下Spring Cloud Gateway内部提供的所有谓语、断言,这样我们才能目标性的进行学习,我整理出来了一个脑图,如下所示:
Spring Cloud GateWay 路由转发实例及规则介绍_第2张图片每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。
Path 方式匹配转发

通过Path转发示例,我们讲解下上面的两种配置,分别是application.yml以及RouteLocator。

配置文件匹配地址转发

我们在application.yml配置文件内添加对应的路由配置,如下所示:
server:
  port: 8080
spring:
  application:
    name: GatewayService
  cloud:
    gateway:
      routes:
        - id: gateway-service
          uri: https://blog.csdn.net
          predicates:
            - Path=/meteor_93
        - id:  user-server
          # lb代表从注册中心获取服务
          uri: lb://BUSINESSSERVICE
          predicates:
            # 转发该路径
            - Path=/user/**
        - id:  blog
          # lb代表从注册中心获取服务
          uri: http://blog.yuqiyu.com
          predicates:
            # 匹配路径转发
            - Path=/api-boot-datasource-switch.html

eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8081/eureka/  # 注册中心 本地测试

先来解释下route的组成部分:

id:路由的ID
uri:匹配路由的转发地址
predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。

在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html时就会被自动转发到http://blog.yuqiyu.com/api-boot-datasource-switch.html,这里要注意完全匹配Path的值时才会进行路由转发。

访问效果如下所示:
Spring Cloud GateWay 路由转发实例及规则介绍_第3张图片RouteLocator 匹配路径转发

在上面的配置中,如果使用RouteLocator方式该怎么进行配置呢?

如下所示:

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
  return builder.routes()
    .route("blog", r -> 
           r.path("/api-boot-datasource-switch.html").uri("http://blog.yuqiyu.com"))
    .build();
}

以上请参考: https://segmentfault.com/a/1190000019101829

讲下转发至注册中心服务接口

一、创建 eureka 工程

1.创建eureka工程,服务注册中心,pom.xml 文件,如下所示:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
         
    
    com.cecurs.eureka
    eureka-service
    jar
    0.0.1-SNAPSHOT
    eureka-service
    eureka-service project for Spring Boot

    
        1.8
        Greenwich.SR3
    

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        

        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



  1. 服务注册中心yml 配置文件,如下所示:
#配置中心
server:
  port: 8081 #服务注册中心端口号
spring:
  application:
    name: EurekaService
eureka:
  instance:
    hostname: 127.0.0.1 #服务注册中心IP地址
  client:
    registerWithEureka: false #是否向服务注册中心注册自己
    fetchRegistry: false #是否检索服务
    serviceUrl: #服务注册中心的配置内容,指定服务注册中心的位置
      defaultZone: http://${eureka.instance.hostname}:${server.port}/EurekaService/eureka/

二、创建 gateway 项目
1、pom文件代码,如下所示:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
         
    
    com.cecurs.gateway
    gateway-service
    jar
    0.0.1-SNAPSHOT
    gateway-service
    Demo project for Spring Boot

    
        1.8
        Greenwich.SR3
    

    
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.projectlombok
            lombok
            true
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



  1. yml配置文件代码如下所示:
server:
  port: 8080
spring:
  application:
    name: GatewayService
  cloud:
    gateway:
      routes:
        - id: gateway-service
          uri: https://blog.csdn.net
          predicates:
            - Path=/meteor_93
        - id:  user-server
          # lb代表从注册中心获取服务
          uri: lb://BUSINESSSERVICE
          predicates:
            # 转发该路径
            - Path=/user/**
        - id:  blog
          # lb代表从注册中心获取服务
          uri: http://blog.yuqiyu.com
          predicates:
            # 匹配路径转发
            - Path=/api-boot-datasource-switch.html

eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8081/eureka/  # 注册中心 本地测试

图例

注册中心
Spring Cloud GateWay 路由转发实例及规则介绍_第4张图片业务中心
Spring Cloud GateWay 路由转发实例及规则介绍_第5张图片Spring Cloud GateWay 路由转发实例及规则介绍_第6张图片

您要感觉写的还不错,可以表表心意。
Spring Cloud GateWay 路由转发实例及规则介绍_第7张图片

具体代码,联系qq: 470801428 获取。

你可能感兴趣的:(Spring,boot,Spring,cloud)