内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

使用alibabasentinel失敗的問題有哪些

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

創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元白堿灘做網(wǎng)站,已為上家服務(wù),為白堿灘各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

前言

sentinel 是面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點(diǎn),從限流、流量整形、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)、熱點(diǎn)防護(hù)等多個(gè)維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。自從hytrix 2018年進(jìn)入維護(hù)狀態(tài),再到springcloud 2020.0版本hytrix被移除,就可以料想未來一段時(shí)間springcloud全家桶的熔斷降級(jí)組件基本上的首選就是alibaba sentinel。

失效場(chǎng)景例子

1、降級(jí)不生效問題

a、原因分析

項(xiàng)目中使用了自定義全局異常處理,而異常數(shù)或者異常比例的統(tǒng)計(jì)在

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

這個(gè)方法執(zhí)行, 自定義全局異常的處理會(huì)先于

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

這個(gè)方法執(zhí)行執(zhí)行, 因?yàn)槲覀冊(cè)谌之惓@锩嬉呀?jīng)對(duì)異常進(jìn)行處理,比如轉(zhuǎn)換為一個(gè)對(duì)象,這樣導(dǎo)致AbstractSentinelInterceptor.afterCompletion無法獲取到異常,進(jìn)而無法統(tǒng)計(jì)異常數(shù)或者異常比例。

b、解決方案

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

因?yàn)槲沂窃诓閕ssue的之前,就通過源碼跟蹤,找到答案,這邊說下我的實(shí)現(xiàn)思路。我的思路是定義一個(gè)切面,在切面的AfterThrowing進(jìn)行異常統(tǒng)計(jì)。因?yàn)榍忻鏁?huì)在全局異常之前執(zhí)行。統(tǒng)計(jì)的源碼我是直接把sentinel統(tǒng)計(jì)的源拷貝過來,核心代碼如下

@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);
    }

    /**
     * 統(tǒng)計(jì)異常
     * @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、授權(quán)規(guī)則不生效問題

a、原因分析

項(xiàng)目中沒有實(shí)現(xiàn)

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

接口,導(dǎo)致無法解析請(qǐng)求來源

b、解決方案

在項(xiàng)目中自定義請(qǐng)求來源解析器。示例代碼如下

**
 * @description: 解析訪問來源,用于授權(quán)規(guī)則--黑白名單。
 * 當(dāng)要進(jìn)行授權(quán)規(guī)則時(shí),則必須配置RequestOriginParser,否則授權(quán)規(guī)則無法生效
 *
 **/
@Component
public class CustomRequestOriginParser implements RequestOriginParser {

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

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

3、熱點(diǎn)規(guī)則不生效問題

a、原因分析

web埋點(diǎn)如果以u(píng)rl作為資源名,規(guī)則不生效

b、解決方案

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

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

配置熱點(diǎn)規(guī)則配置@SentinelResource后,可能還會(huì)出現(xiàn)

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 = "測(cè)試熱點(diǎn)規(guī)則")
    @SentinelResource(value = "testParamFlowRule")
    public AjaxResult<String> testParamFlowRule(@PathVariable("msg") String msg) throws BlockException {
        System.out.println(String.format("msg : %s",msg));
        return AjaxResult.success("測(cè)試熱點(diǎn)規(guī)則");
    }

感謝各位的閱讀,以上就是“使用alibaba sentinel失敗的問題有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)使用alibaba sentinel失敗的問題有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

分享名稱:使用alibabasentinel失敗的問題有哪些
文章來源:http://m.rwnh.cn/article38/igjipp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司網(wǎng)站收錄、ChatGPT、企業(yè)網(wǎng)站制作、營(yíng)銷型網(wǎng)站建設(shè)定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
神农架林区| 尼勒克县| 璧山县| 宣化县| 永昌县| 贵州省| 恩施市| 古交市| 彰武县| 沐川县| 任丘市| 驻马店市| 高阳县| 尼勒克县| 资阳市| 穆棱市| 延安市| 和龙市| 家居| 嘉鱼县| 兴仁县| 开封县| 宁德市| 如皋市| 云南省| 望城县| 玛多县| 沙雅县| 万安县| 马鞍山市| 清河县| 四平市| 竹山县| 洞头县| 湖北省| 阜阳市| 宁安市| 丹棱县| 三台县| 汕尾市| 嘉义市|