今天在整合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
最后說一下,最后找到解決辦法是在開源中國找過的,大家有事沒事可以去這個網站逛逛,比百度里面一些文章靠譜,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/79311.html
標籤:Java
上一篇:Spring bean初始化及銷毀你必須要掌握的回呼方法
下一篇:Mybatis-Plus
