Gateway

106 阅读1分钟

Gateway是什么

Gateway 网关环境搭建 cloud-gateway-gateway9527

pom

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>


    <dependency>
        <groupId>com.nyc.cloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <!--Eureka 客户端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
</dependencies>

yml

#server:
#  port: 9527
#spring:
#  application:
#    name: cloud-gateway
#eureka:
#  instance:
#    hostname: cloud-gateway-service
#  client:
#    service-url:
#      register-with-eureka: true
#      fetch-registry: true
#      defaultZone: http://eureka7001.com:7001/eureka

server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
        - id: payment_routh                   #路由的ID,没有固定的规则,但要求唯一,建议配合服务名
          #uri: http://localhost:8001          #匹配后提供服务的路由地址
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/get/**            #断言,路径相匹配的进行路由


        - id: payment_routh2                   #路由的ID,没有固定的规则,但要求唯一,建议配合服务名
          #uri: http://localhost:8001        #匹配后提供服务的路由地址
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/lb/**           #断言,路径相匹配的进行路由
            - After=2021-09-12T13:33:23.115+08:00[Asia/Shanghai]
            #- Cookie=username, zzyy
      discovery:
        locator:
          enabled: true
eureka:
  instance:
    hostname: cloud-gateway-service
  client:
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka

启动类

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class gatewayGatewayMain8527 {
    public static void main(String[] args) {
        SpringApplication.run(gatewayGatewayMain8527.class);
    }
}

Gateway路由断言规则

官网路由断言配置规则:docs.spring.io/spring-clou…

图片.png

Gateway过滤器

官网过滤器: docs.spring.io/spring-clou…

图片.png

过滤器自定义

自定义过滤器需要实现如下两个接口 GlobalFilter, Ordered

@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        log.info("***********come in MyLogGateWayFilter" + new Date());
        String uname = exchange.getRequest().getQueryParams().getFirst("uname");
        if (uname == null){
            log.info("***********用户名为null,非法用户┭┮﹏┭┮");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 0;
    }
}