WebCallbackManager SpringCloud Alibaba2.2.0 無法導包,不兼容問題 主要是Sentinel


今天在整合SpringCloud alibaba Sentinel 時發現一個意想不到的事情,那就是設置攔截資源,自定義返回結果的時候WebCallbackManager類實現UrlBlockHandler 死活
無法實現,上網查了很久,沒有一點用處,說到這里,不得不吐槽一下有些博主,你們寫博客就算要借鑒別人的,你好歹稍微改改標點符號呀,標題呀,你們完全是照着抄寫ctry c+ctry v 啊,我也是醉了,搜到的內容真的慘不忍睹。。。好了開始正題

都知道,之前的版本升級,高版本都是能兼容低版本的,可是這次2.2.0的升級不知道為啥,就是沒兼容低版本的sentinel,之前的版本基於==sentinel-web-servlet ==實現
而2.2.0 是依賴 sentinel-spring-webmvc-dapter , 基於 Spring 的 Interceptor 攔截資源,而不再是 CommonFilter

實現接口發現變化

// 之前版本 
public class PigxUrlBlockHandler implements UrlBlockHandler {
	@Override
	public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException e) throws IOException {
		// 降級業務處理
  }
}

// v2.2.0
public class PigxUrlBlockHandler implements BlockExceptionHandler {

	@Override
	public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
    // 降級業務處理
	}
}

請求解析器
實現接口的包發生變化

//舊版本
import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser;
// v2.2.0
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;

// 請求解析器實現
public class PigxHeaderRequestOriginParser implements RequestOriginParser {
  private static final String ALLOW = "Allow";

  @Override
  public String parseOrigin(HttpServletRequest request) {
    return request.getHeader(ALLOW);
  }
}

** 默認情況下只攔截 /* 請求** 注意:只有斜杠后面只有一個 *
上文提到V2.2.0 是基於 Interceptor 實現,默認攔截規則為 /*, 也就是只有 請求URI 為 / ,/a 的請求可以被sentinel處理,dashboard 也只會顯示被攔截的資源,需要配置一下攔截規則。

spring:
  cloud:
    sentinel:
      filter:
        url-patterns: /**

** 默認情況: spring boot admin 顯示部分服務為 down,控台只顯示部分服務**
訪問服務 IP:PORT/actuator/health 顯示sentinel 狀態為 down,默認情況下 sentinel 是懶加載的,在啟動時不會立即給 sentinel-server 發送心跳,導致SentinelHealthIndicator 將狀態判為 false ,進而導致 Spring Boot Admin 讀取到 actuator 信息為 down
可以設置飢餓加載,啟動加載時就會加載,並發送心跳

spring:
  cloud:
    sentinel:
      eager: true

最后說一下,最后找到解決辦法是在開源中國找過的,大家有事沒事可以去這個網站逛逛,比百度里面一些文章靠譜。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM