上週(2020.02.12)咱們寫了一篇關於《Spring Cloud Alibaba V2.2.0 發佈》 相關的特性,v2.2.0
是基於 Spring Cloud Hoxton
的版本。下面總結一下由 Spring Cloud Alibaba v2.1.0
升級至 v2.2.0
遇到的問題。java
主要問題涉及 sentinel
的問題。git
Spring Cloud Alibaba Sentinel
再也不依賴 sentinel-web-servlet
實現,而是依賴 sentinel-spring-webmvc-dapter
, 基於 Spring 的 Interceptor
攔截資源,而再也不是 CommonFilter
。github
實現接口發現變化web
// 以前版本
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 {
// 降級業務處理
}
}
複製代碼
實現接口的包發生變化spring
//舊版本
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
也只會顯示被攔截的資源,須要配置一下攔截規則。 此問題咱們已提交 pull request
修復 Modify the sentinelInterceptor default interception rule and backward併發
spring:
cloud:
sentinel:
filter:
url-patterns: /**
複製代碼
涉及源碼: SentinelWebAutoConfiguration.addInterceptors()
mvc
spring boot admin
顯示部分服務爲 down
,控臺只顯示部分服務訪問服務 IP:PORT/actuator/health
顯示sentinel 狀態爲 down
,默認狀況下 sentinel 是懶加載的,在啓動時不會當即給 sentinel-server
發送心跳,致使SentinelHealthIndicator
將狀態判爲 false
,進而致使 Spring Boot Admin
讀取到 actuator
信息爲 down
ide
能夠設置飢餓加載,啓動加載時就會加載,併發送心跳url
spring:
cloud:
sentinel:
eager: true
複製代碼
源碼能夠參考: SentinelAutoConfiguration.init()
, 利用SPI
加載對應的 業務 spa
Spring Cloud Alibaba Sentinel
模塊源碼,處理邏輯相對簡單明瞭建議通讀。核心是初始化 sentinel
的dapter
,而且注入了 默認的降級等實現。
『★★★★★』 基於Spring Boot 2.二、 Spring Cloud Hoxton & Alibaba、 OAuth2 的RBAC 權限管理系統