zoukankan      html  css  js  c++  java
  • 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
    

    最后说一下,最后找到解决办法是在开源中国找过的,大家有事没事可以去这个网站逛逛,比百度里面一些文章靠谱。。。

  • 相关阅读:
    链队列的实现
    LeetCode——Count Complete Tree Nodes
    LeetCode——Lowest Common Ancestor of a Binary Search Tree
    LeetCode——Palindrome Linked List
    中文乱码问题及其解决办法
    LeetCode——Valid Anagram
    TCP/IP网络知识点总结
    深入理解javascript原型和闭包——从【自由变量】到【作用域链】
    AJAX笔试面试题汇总
    前端开发面试知识点大纲
  • 原文地址:https://www.cnblogs.com/exce-ben/p/13501972.html
Copyright © 2011-2022 走看看