• [Spring cloud 一步步实现广告系统] 3. 网关路由


    Zuul(Router and Filter)

    WIKI: 传送门

    UTOOLS1563957310060.png

    作用
    1. 认证,鉴权(Authentication/Security)
    2. 预判(Insights)
    3. 压力测试(Stress Testing)
    4. 灰度/金丝雀测试(Canary Testing)
    5. 动态路由(Dynamic Routing)
    6. 服务迁移(Service Migration)
    7. 降低负载(Load Shedding)
    8. 静态响应处理(Static Response handling)
    9. 主动/主动交换管理(Active/Active traffic management)

    关键配置:

    The configuration property zuul.host.maxTotalConnections and zuul.host.maxPerRouteConnections, which default to 200 and 20 respectively.

    创建mscx-ad-zuul

    三步曲创建法:

    添加依赖
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
        </dependencies>
    
    加注解
    @SpringCloudApplication
    @EnableZuulProxy //启用网关
    public class GatewayApplication {
        public static void main(String[] args) {
            SpringApplication.run(GatewayApplication.class, args);
        }
    }
    
    改配置
    spring:
      application:
        name: ad-gateway-zuul
    server:
      port: 1111
    eureka:
      client:
        service-url:
          defaultZone: http://server1:7777/eureka/,http://server2:8888/eureka/,http://server3:9999/eureka/
      instance:
        hostname: ad-gateway-zuul
    zuul:
      ignored-services: '*' # 过滤所有请求,除了下面routes中声明过的服务
      routes:
        sponsor: #在路由中自定义服务路由名称
          path: /ad-sponsor/**
          serviceId: mscx-ad-sponsor #微服务name
          strip-prefix: false
        search: #在路由中自定义服务路由名称
          path: /ad-search/**
          serviceId: mscx-ad-search #微服务name
          strip-prefix: false
      prefix: /gateway/api
      strip-prefix: false #不对 prefix: /gateway/api 设置的路径进行截取,默认转发会截取掉配置的前缀
    
    
    过滤器编写

    我们来编写一个记录请求时间周期的过滤器,根据Filter的三种类型:Pre filters,routing filtersPost filters,我们需要定义2个filter,用来记录开始和结束时间,很明显,我们需要实现Pre & Post2个过滤器。

    @Slf4j
    @Component
    public class PreRequestFilter extends ZuulFilter {
        @Override
        public String filterType() {
            // pre filter
            return FilterConstants.PRE_TYPE;
        }
    
        @Override
        public int filterOrder() {
            return 0;
        }
    
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Override
        public Object run() throws ZuulException {
            //获取当前请求的请求上下文
            RequestContext requestContext = RequestContext.getCurrentContext();
            //记录请求进入时间
            requestContext.set("api_request_time", System.currentTimeMillis());
            return null;
        }
    }
    
    ---
      
    @Slf4j
    @Component
    public class AccessLogFilter extends ZuulFilter {
    
        @Override
        public String filterType() {
            return FilterConstants.POST_TYPE;
        }
    
        @Override
        public int filterOrder() {
            //需要最后一个执行的filter
            return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;
        }
    
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Override
        public Object run() throws ZuulException {
            RequestContext requestContext = RequestContext.getCurrentContext();
            HttpServletRequest request = requestContext.getRequest();
            log.info("Request "{}" spent : {} seconds.", request.getRequestURI(),
                    (System.currentTimeMillis() - Long.valueOf(requestContext.get("api_request_time").toString())) / 1000);
            return null;
        }
    }
    

    Gateway

    后续更新---
    做一个好人。

  • 相关阅读:
    【C#】C#8.0常用新特性
    【Docker】Asp.net core在docker容器中的端口问题
    【gRPC】ProtoBuf 语言快速学习指南
    【日常排雷】 .Net core 生产环境appsetting读取失败
    【gRPC】 在.Net core中使用gRPC
    raspbian buster阿里镜像
    管道通信
    关于utf8mb4的使用
    ef core数据迁移的一点小感悟
    windows 端口转发
  • 原文地址:https://www.cnblogs.com/zhangpan1244/p/11252701.html
Copyright © 2020-2023  润新知