Gateway--服务网关

2020-07-19  本文已影响0人  MaJiT

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

1.创建网关微服务

2.导入依赖

<!--gateway网关-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2.配置微服务

spring:
  cloud:
   gateway:
      discovery:
        locator:
          enabled: true    #开启从注册中心动态创建路由
      routes:   # 路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务]
        - id: cloud-provider-payment  # 当前路由的标识, 要求唯一
          uri: lb://cloud-payment-service #nacos中的配置
          #uri: http://localhost:8001 #实际路径
          #order: 1 # 路由的优先级,数字越小级别越高
          predicates:  # 断言(就是路由转发要满足的条件)
            #- Path=/payment/list/** # 当请求路径满足Path指定的规则时,才进行路由转发
            #- After=2018-01-20T06:06:06+08:00[Asia/Shanghai] #这个时间以后生效
            #- Cookie=username,mj #Cookie名必须为mj才能访问
            - Header=X-Access-Token, #请求头中X-Access-Token部位空
            #- Method=GET #只有GET方法能访问
            #filters:  # 过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改
            #- StripPrefix=1  # 转发之前去掉1层路径

3.自定义过滤器

@Configuration
@Slf4j
public class MyGatewayFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        log.info("################ 全局Gateway 过滤器开始工作 ###############");
        HttpHeaders headers = exchange.getRequest().getHeaders();
        //需求操作
        if (headers.containsKey("X-Access-Token")){
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }

        return chain.filter(exchange);
    }

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

4.启动类

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

注意:gateway微服务不需要引入web starter

上一篇下一篇

猜你喜欢

热点阅读