「升级指南」Spring Cloud Alibaba v2.2.0 升级问题整理

a 夏天 提交于 2020-02-25 18:46:28

前言

上周(2020.02.12)我们写了一篇关于《Spring Cloud Alibaba V2.2.0 发布》 相关的特性,v2.2.0 是基于 Spring Cloud Hoxton的版本。下面总结一下由 Spring Cloud Alibaba v2.1.0 升级至 v2.2.0 遇到的问题。

主要问题涉及 sentinel 的问题。

破坏性 ,不向下兼容

Spring Cloud Alibaba Sentinel 不再依赖 sentinel-web-servlet 实现,而是依赖 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 也只会显示被拦截的资源,需要配置一下拦截规则。 此问题我们已提交 pull request 修复 Modify the sentinelInterceptor default interception rule and backward

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

涉及源码: SentinelWebAutoConfiguration.addInterceptors()

默认情况: 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

源码可以参考: SentinelAutoConfiguration.init(), 利用SPI加载对应的 业务

总结

Spring Cloud Alibaba Sentinel 模块源码,处理逻辑相对简单明了建议通读。核心是初始化 sentineldapter ,并且注入了 默认的降级等实现。

『★★★★★』 基于Spring Boot 2.2、 Spring Cloud Hoxton & Alibaba、 OAuth2 的RBAC 权限管理系统 > 项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!