中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用alibaba sentinel失敗的問題有哪些

發布時間:2021-10-12 15:30:48 來源:億速云 閱讀:151 作者:iii 欄目:編程語言

這篇文章主要講解了“使用alibaba sentinel失敗的問題有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“使用alibaba sentinel失敗的問題有哪些”吧!

前言

sentinel 是面向分布式服務架構的流量控制組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統負載保護、熱點防護等多個維度來幫助開發者保障微服務的穩定性。自從hytrix 2018年進入維護狀態,再到springcloud 2020.0版本hytrix被移除,就可以料想未來一段時間springcloud全家桶的熔斷降級組件基本上的首選就是alibaba sentinel。

失效場景例子

1、降級不生效問題

a、原因分析

項目中使用了自定義全局異常處理,而異常數或者異常比例的統計在

com.alibaba.csp.sentinel.adapter.spring.webmvc.AbstractSentinelInterceptor.afterCompletion

這個方法執行, 自定義全局異常的處理會先于

com.alibaba.csp.sentinel.adapter.spring.webmvc.AbstractSentinelInterceptor.afterCompletion

這個方法執行執行, 因為我們在全局異常里面已經對異常進行處理,比如轉換為一個對象,這樣導致AbstractSentinelInterceptor.afterCompletion無法獲取到異常,進而無法統計異常數或者異常比例。

b、解決方案

在官方的issue中已經有網友提出了解決思路 https://github.com/alibaba/Sentinel/issues/1281 和 https://github.com/alibaba/Sentinel/issues/404

因為我是在查issue的之前,就通過源碼跟蹤,找到答案,這邊說下我的實現思路。我的思路是定義一個切面,在切面的AfterThrowing進行異常統計。因為切面會在全局異常之前執行。統計的源碼我是直接把sentinel統計的源拷貝過來,核心代碼如下

@Aspect
@Component
@Slf4j
public class StatisticsExceptionCountAspect {

    @Autowired
    @Lazy
    private BaseWebMvcConfig baseWebMvcConfig;

    @Pointcut("execution(* com.github.lybgeek.sentinel.controller..*.*(..))")
    public void pointcut(){

    }

    @AfterThrowing(pointcut = "pointcut()",throwing = "ex")
    public void afterAfterThrowing(Throwable ex){
        log.info("statisticsExceptionCount...");
        traceException(ex);
    }

    /**
     * 統計異常
     * @param ex
     */
    private void traceException(Throwable ex) {
        Entry entry = getEntryInRequest();
        if (entry != null) {
            Tracer.traceEntry(ex, entry);
        }
    }
    protected Entry getEntryInRequest() {
        RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
        ServletRequestAttributes attributes = (ServletRequestAttributes)requestAttributes;
        HttpServletRequest request = attributes.getRequest();
        Object entryObject = request.getAttribute(baseWebMvcConfig.getRequestAttributeName());
        return entryObject == null ? null : (Entry)entryObject;
    }
}

2、授權規則不生效問題

a、原因分析

項目中沒有實現

com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser

接口,導致無法解析請求來源

b、解決方案

在項目中自定義請求來源解析器。示例代碼如下

**
 * @description: 解析訪問來源,用于授權規則--黑白名單。
 * 當要進行授權規則時,則必須配置RequestOriginParser,否則授權規則無法生效
 *
 **/
@Component
public class CustomRequestOriginParser implements RequestOriginParser {

    @Override
    public String parseOrigin(HttpServletRequest request) {
        String origin = request.getParameter("origin");
        if(!StringUtils.isEmpty(origin)){
            //根據接口是否攜帶origin參數,如果攜帶參數為origin=pc,
            // 且sentinel-dashbord授權規則,來源設置為pc時,則表示要對請求來源為pc,進行黑白名單配置

            return origin;
        }
        //如果沒請求參數接口沒有攜帶,則表示按ip進行黑白名單設置
        return request.getRemoteAddr();
    }
}

3、熱點規則不生效問題

a、原因分析

web埋點如果以url作為資源名,規則不生效

b、解決方案

以@SentinelResource注解定義的name作為資源名

參考官方issue https://github.com/alibaba/Sentinel/issues/1734

配置熱點規則配置@SentinelResource后,可能還會出現

java.lang.reflect.UndeclaredThrowableException: null

解決方法:需要在方法中添加throws BlockException或添加blockHandler來處理異常

參考官方issue

https://github.com/alibaba/Sentinel/issues/776

示例代碼

    @GetMapping(value = "/paramFlowRule/{msg}")
    @ApiImplicitParams({
            @ApiImplicitParam(name="msg",defaultValue = "hello",value="信息", paramType = "path"),
    })
    @ApiOperation(value = "測試熱點規則")
    @SentinelResource(value = "testParamFlowRule")
    public AjaxResult<String> testParamFlowRule(@PathVariable("msg") String msg) throws BlockException {
        System.out.println(String.format("msg : %s",msg));
        return AjaxResult.success("測試熱點規則");
    }

感謝各位的閱讀,以上就是“使用alibaba sentinel失敗的問題有哪些”的內容了,經過本文的學習后,相信大家對使用alibaba sentinel失敗的問題有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辛集市| 怀安县| 高清| 松桃| 股票| 吉木萨尔县| 博爱县| 阜阳市| 光泽县| 邯郸县| 珠海市| 承德县| 五指山市| 沾益县| 襄汾县| 儋州市| 侯马市| 宜章县| 乾安县| 丹凤县| 秦安县| 敦化市| 桓台县| 渝中区| 蒙山县| 当阳市| 丰原市| 弥渡县| 武夷山市| 瑞安市| 体育| 筠连县| 镇江市| 云龙县| 甘南县| 麻栗坡县| 靖安县| 陵川县| 吴川市| 昌图县| 怀集县|