美文网首页
Gateway--服务网关

Gateway--服务网关

作者: MaJiT | 来源:发表于2020-07-19 12:03 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Gateway--服务网关

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