美文网首页
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