「升級指南」Spring Cloud Alibaba v2.2.0 升級問題整理

前言

上週(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 攔截資源,而再也不是 CommonFiltergithub

降級策略修改

實現接口發現變化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 信息爲 downide

能夠設置飢餓加載,啓動加載時就會加載,併發送心跳url

spring:
 cloud:
 sentinel:
 eager: true
複製代碼

源碼能夠參考: SentinelAutoConfiguration.init(), 利用SPI加載對應的 業務 spa

總結

Spring Cloud Alibaba Sentinel 模塊源碼,處理邏輯相對簡單明瞭建議通讀。核心是初始化 sentineldapter ,而且注入了 默認的降級等實現。

『★★★★★』 基於Spring Boot 2.二、 Spring Cloud Hoxton & Alibaba、 OAuth2 的RBAC 權限管理系統

image
相關文章
相關標籤/搜索