<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      springboot~zuul實現(xiàn)網(wǎng)關(guān)

      網(wǎng)關(guān)在微服務(wù)里的角色

      在微服務(wù)架構(gòu)體系里,網(wǎng)關(guān)是非常重要的一個環(huán)節(jié),它主要實現(xiàn)了一些功能的統(tǒng)一處理,包括了:

      1. 統(tǒng)一授權(quán)
      2. 統(tǒng)一異常處理
      3. 路由導(dǎo)向
      4. 跨域處理
      5. 限流

      實踐一下

      1 添加依賴

      dependencies {
      	implementation('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
      	implementation('org.springframework.cloud:spring-cloud-starter-netflix-zuul')
      	testImplementation('org.springframework.boot:spring-boot-starter-test')
          implementation('com.marcosbarbero.cloud:spring-cloud-zuul-ratelimit:1.3.2.RELEASE')
      }
      

      2 添加yml

      server:
        port: 8300
      spring:
        application:
          name: microservice-gateway-zuul
      eureka:
        client:
          register-with-eureka: true
          fetch-registry: true
          service-url:
            defaultZone: http://localhost:6761/eureka
        instance:
          ip-address: true
      
      zuul:
       routes:
          users:
             path: /lind/** #以lind開頭的路徑被重定向到lind服務(wù)
             serviceId: lind
       add-host-header: true #顯示真實的http頭
       retryable: false #關(guān)閉Hystrix的重試功能
       ratelimit:
          enabled: true
         #  repository: REDIS
          behind-proxy: true
          policies:
             users:
               limit: 5 #限流,每分鐘請求5次
               refresh-interval: 60
               type:
                 - user
                 - origin
                 - url
               #       url類型的限流就是通過請求路徑區(qū)分
               #       origin是通過客戶端IP地址區(qū)分
               #       user是通過授權(quán)用戶進行區(qū)分,也包括匿名用戶
      

      3 添加實現(xiàn)代碼
      http攔截器,獲取用戶ID,為子服務(wù)進行傳遞

      public class PreRequestLogFilter extends ZuulFilter {
        private static final Logger logger = LoggerFactory.getLogger(PreRequestLogFilter.class);
        private final RateLimiter rateLimiter = RateLimiter.create(1000.0);
      
        @Override
        public Object run() {
      
          try {
            RequestContext currentContext = RequestContext.getCurrentContext();
            HttpServletResponse response = currentContext.getResponse();
            HttpServletRequest reqeust = currentContext.getRequest();
      
            currentContext.addZuulRequestHeader("userId","123");//向子系統(tǒng)http頭寫數(shù)據(jù)
            currentContext.addZuulRequestHeader("userName","test");
      
            PreRequestLogFilter.logger.info(
                String.format("send %s request to %s",
                    reqeust.getMethod(),
                    reqeust.getRequestURL().toString()));
      
            if (!rateLimiter.tryAcquire()) {
              HttpStatus httpStatus = HttpStatus.TOO_MANY_REQUESTS;
              response.setContentType(MediaType.TEXT_PLAIN_VALUE);
              response.setStatus(httpStatus.value());
              response.getWriter().append(httpStatus.getReasonPhrase());
              currentContext.setSendZuulResponse(false);
              throw new ZuulException(
                  httpStatus.getReasonPhrase(),
                  httpStatus.value(),
                  httpStatus.getReasonPhrase()
              );
            }
          } catch (java.lang.Exception e) {
            ReflectionUtils.rethrowRuntimeException(e);
          }
          return null;
      
        }
      
        @Override
        public boolean shouldFilter() {
      
          // 判斷是否需要過濾
          return true;
      
        }
      
      
        @Override
      
        public String filterType() {
      
          return FilterConstants.PRE_TYPE;
      
        }
      
      
        @Override
      
        public int filterOrder() {
      
          return Ordered.HIGHEST_PRECEDENCE;
      
        }
      
      
      }
      

      在主程中注入這個過濾器

        @Bean
        public PreRequestLogFilter preRequestLogFilter() {
          return new PreRequestLogFilter();
        }
      

      4 使用它
      在URL上通過localhost:8300/users/home 將進行l(wèi)ind服務(wù)里的home控制器下,并在http頭上寫入了userid和username這個鍵值對!

      posted @ 2018-10-18 16:52  張占嶺  閱讀(2271)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 岛国av无码免费无禁网站| 国产麻豆精品一区一区三区| 韩国免费a级毛片久久| 免费人成网站免费看视频| 成人性生交片无码免费看| 国产中文三级全黄| 无码成人午夜在线观看| 四虎库影成人在线播放| 亚洲欧美精品一中文字幕| 天天躁夜夜躁狠狠喷水| 免费现黄频在线观看国产| 亚洲首页一区任你躁xxxxx| 日韩欧美aⅴ综合网站发布| 亚洲国产成人久久综合野外 | 欧美疯狂xxxxbbbb喷潮| 亚洲色成人网站www永久下载| 国产偷自一区二区三区在线| 亚洲一区成人av在线| 无码A级毛片免费视频下载| 精品国产三级a∨在线欧美| 久热久热中文字幕综合激情| 日韩精品福利一二三专区| 性视频一区| 国产精品亚洲综合久久小说| 一区二区三区四区自拍偷拍| 成人国产精品中文字幕| 精品熟女少妇av免费久久| 亚洲综合无码一区二区三区不卡| 国产精品中文一区二区| 国产精品久久久久aaaa| 国内自拍视频在线一区| 日本区二区三区不卡视频| 亚洲人成网站在线在线观看| 韩国主播av福利一区二区| 国产一区二区三区在线观| 忘忧草在线社区www中国中文| 国产四虎永久免费观看| 自拍偷拍第一区二区三区| 伊大人香蕉久久网欧美| 亚洲精品日韩在线观看| 国产精品久久国产精麻豆|