日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

擴展接口

本文為您介紹Web Servlet Filter、Dubbo Adapter等擴展接口。

Web Servlet Filter

  • 自定義限流頁面/處理邏輯

    默認情況下,當請求被限流時會返回默認的提示頁面。可通過三種方式設置自定義的跳轉URL:

    • 方式一:WebServletConfig.setBlockPage(blockPage)方法
      示例:
      //設置全局生效,被流控的所有頁面都會跳轉到這里。
      WebServletConfig.setBlockPage("https://www.example.test/");
    • 方式二:JVM -Dcsp.sentinel.web.servlet.block.page=xxx
      示例:
      //設置全局生效,被流控的所有頁面都會跳轉到這里。
      -Dcsp.sentinel.web.servlet.block.page=https://www.fallback.page.com/
    • 方式三:更靈活的方式是定義UrlBlockHandler接口限流處理邏輯,并將其注冊至WebCallbackManager
      自定義處理邏輯的示例:
      // 全局設置一次即可,比如在某個全局的init()方法里加入。
      WebCallbackManager.setUrlBlockHandler(new UrlBlockHandler() {
          @Override
          public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException ex)
              throws IOException {
              // request里包含了此次請求所有的信息,可以從其中解析出URL、請求參數等。
              logger.info("blocked: " + request.getPathInfo());
              // response表示響應對象,直接向其中寫fallback結果即可。
              response.sendRedirect("https://www.fallback.page.com/"); // 將請求重定向到fallback地址
          }
      });
      返回Status 500的示例:
      // 全局設置一次即可,比如在某個全局的init()方法里加入。
      WebCallbackManager.setUrlBlockHandler(new UrlBlockHandler() {
          @Override
          public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException ex)
              throws IOException {
              // request里包含了此次請求所有的信息,可以從其中解析出URL、請求參數等。
              logger.info("blocked: " + request.getPathInfo());
              // response表示響應對象,直接向其中寫fallback結果即可。
              response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
              response.getWriter().println("flow control");
          }
      });
  • URL 資源清洗

    Sentinel Web Servlet Filter會將每個到來的不同的URL都作為不同的資源處理,因此對于REST風格的API,需要自行實現UrlCleaner接口清洗資源,例如,將滿足/foo/:id的URL都歸到/foo/*資源下,然后將其注冊至WebCallbackManager中。否則會導致資源數量過多,超出資源數量閾值(6000)時多出的資源的規則將不會生效

    示例如下:

    @PostConstruct
    public void init() {
         // 全局注冊一次即可
        WebCallbackManager.setUrlCleaner(new UrlCleaner() {
            @Override
            public String clean(String originUrl) {
                 // 對originUrl進行變換,得到歸一化后的URL
                if (originUrl == null || originUrl.isEmpty()) {
                    return originUrl;
                }
                 // 比如將滿足/foo/:id的URL都歸到/foo/*
                if (originUrl.startsWith("/foo/")) {
                    return "/foo/*";
                }
                return originUrl;
            }
        });
    }
  • 解析請求來源

    若希望對HTTP請求按照來源限流,則可以自己實現RequestOriginParser接口從HTTP請求中解析origin并注冊至WebCallbackManager中,示例如下:

    WebCallbackManager.setRequestOriginParser(new RequestOriginParser() {
        @Override
        public String parseOrigin(HttpServletRequest request) {
            return request.getRemoteAddr();
        }
    });

Dubbo Adapter

Sentinel Dubbo Adapter支持配置全局的Fallback函數,可以在Dubbo服務被限流、降級或負載保護的時候進行相應的Fallback處理。用戶只需要實現自定義的DubboFallback接口,并通過DubboFallbackRegistry注冊即可。默認情況會直接將BlockException包裝后拋出。

其它擴展接口

Sentinel提供多樣化的SPI接口用于提供擴展的能力。用戶可以在用同一個sentinel-core的基礎上自行擴展接口實現,從而可以方便地根據業務需求給Sentinel添加自定義的邏輯。目前Sentinel提供如下的擴展點:

  • 初始化過程擴展:提供InitFunc SPI接口,可以添加自定義的一些初始化邏輯,如動態規則源注冊等。
  • Slot Chain擴展:用于給Sentinel功能鏈添加自定義的功能并自由編排。
  • 指標統計擴展(StatisticSlot Callback):用于擴展StatisticSlot指標統計相關的邏輯。
  • Transport擴展:提供CommandHandlerCommandCenter等接口,用于對心跳發送、監控API Server進行擴展。