美文网首页
Spring Cloud 第二代网关 Gateway

Spring Cloud 第二代网关 Gateway

作者: Tinyspot | 来源:发表于2023-01-04 22:58 被阅读0次

    1. Gateway

    • 使用网关作为接口的服务的统一代理,前端通过网关完成服务的统一调用

    1.1 路由(Route)

    • 包含 ID, 目标URL, Predicate集合, Filter集合

    1.2 断言(Predicate)

    • Path 路由断言
    • Query 路由断言
    • Method 路由断言
    • Header 路由断言
    • 自定义路由断言,继承 AbstractRoutePredicateFactory

    1.3 过滤器(Filter)

    • AddRequestHeader 过滤器
    • RemoveRequestHeader 过滤器
    • SetStatus 过滤器
    • RedirectTo 过滤器
    • 自定义过滤器,继承 AbstractGatewayFilterFactory

    2. 实战

    • Spring Cloud Gateway 内部通过 Netty + Webflux 实现,Webflux 与 Spring MVC 存在冲突,所以不要引入 spring-boot-starter-web
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
    

    2.1 路由配置(服务IP)

    server:
      port: 8010
    
    spring:
      application:
        name: concrete-gateway
      cloud:
        gateway:
          discovery:
            locator:
              enabled: true # 开启注册与发现功能
              lower-case-service-id: true # 把服务名转换为小写,Eureka中默认是大写
          routes:
          - id: eureka-client
            uri: http://127.0.0.1:8770
            predicates:
            - path=/user/**
    
    @SpringBootApplication
    public class ConcreteGatewayApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConcreteGatewayApplication.class, args);
        }
    }
    

    请求地址 http://localhost:8010/user/query

    2.2 动态路由配置(面向服务的路由)

    • Eureka服务名
    @SpringBootApplication
    @EnableEurekaClient
    public class ConcreteGatewayApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConcreteGatewayApplication.class, args);
        }
    }
    
    server:
      port: 8010
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    
    spring:
      application:
        name: concrete-gateway
      cloud:
        gateway:
          discovery:
            locator:
              enabled: true # 开启注册与发现功能
              lower-case-service-id: true # 把服务名转换为小写,Eureka中默认是大写
          routes: # List 类型写法:横线 或 逗号 标识一个对象
          - id: eureka-client # 自定义标识,唯一
            uri: lb://concrete-eureka-client # lb表示从注册中心获取服务
            # predicates: Path=/user/**
            predicates:
            - Path=/user/**
    

    Path=/user/** 表示多级 Path, 例如 /user/query/1001

    相关文章

      网友评论

          本文标题:Spring Cloud 第二代网关 Gateway

          本文链接:https://www.haomeiwen.com/subject/otudcdtx.html