Spring Gateway配置使用(一)

参考文档:Spring Gateway官方文档 , 玹霖的博客

1.Spring Gateway简介

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

2.Spring Gateway工作原理

Spring Gateway配置使用(一)_第1张图片
Spring Gateway工作结构图

Spring Gateway配置使用(一)_第2张图片
spring_cloud_gateway_diagram.png

3.Spring Gateway配置和使用

由于项目使用maven模块化配置,Springboot版本为:2.0.3.RELEASE, SpringCloud版本为:Finchley.RELEASE

  • pom配置:

      
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-webflux
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix
        
        
            org.springframework.cloud
            spring-cloud-starter-contract-stub-runner
            
                
                    org.springframework.boot
                    spring-boot-starter-web
                
            
        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
            
                
                    org.springframework.boot
                    spring-boot-starter-web
                
            
        
    

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

请注意:不要引入spring-boot-starter-web包,会导致Gateway启动抛出异常


Spring Gateway支持两种方式提供路由服务,其一是配置文件启用,其二则是通过代码达到目的

  • application.yml配置实现
spring:
  application:
    name: xxxx
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        enabled: true
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
        service-name: xxxx
        prefer-ip-address: true
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      # This route rule used to forward request to activity server
      - id: activity-route
        uri: lb://activity
        predicates:
        - Path=/activity/**
        filters:
        - StripPrefix=1

注意:Gateway默认转发是全路径的,设置StripPrefix=1表示从二级url路径转发,即http://localhost:port/activity/test将会转发到http://{activity}/test

  • 代码实现
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.path("/activity/**")
                        .filters(f -> f.stripPrefix(1).filter(new TestGetWayFilter()).addResponseHeader("X-Response-Default-Foo", "Default-Bar"))
                        .uri("lb://activity")
                        .order(0)
                        .id("activity-route")
                )
                .build();
 }

你可能感兴趣的:(Spring Gateway配置使用(一))