黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 Dubbo的Filter執(zhí)行順序

Dubbo的Filter執(zhí)行順序

更新時(shí)間:2022-05-26 10:20:35 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2123次

服務(wù)提供方的過(guò)濾器被調(diào)用順序:app

EchoFilter->ClassLoaderFilter->GenericFilter->ContextFilter->(這4個(gè)是在代碼中指定的)ide

ExceptionFilter-> TimeoutFilter ->MonitorFilter-> TraceFilter.net

服務(wù)消費(fèi)方的過(guò)濾器順序:blog

ConsumerContextFilter->FutureFilter->MonitorFilter排序

負(fù)責(zé)加載過(guò)濾器的類文檔

ProtocolFilterWrapperget

這個(gè)順序和SPI配置文件的順序并不一致。那么是什么決定了Filter的順序呢?

經(jīng)過(guò)查看源代碼能夠看到,在初始化Filter時(shí),有一個(gè)對(duì)全部的過(guò)濾器排序的過(guò)程,其使用的比較類是ActivateComparator。在這個(gè)類中,能夠看到,是使用Filter中的Activate類進(jìn)行排序的。而Activate注解中,有一個(gè)order的屬性,這個(gè)屬性指定了Filter在chain中的順序。代碼以下:io

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Activate {
    String[] group() default {};
    String[] value() default {};
    String[] before() default {};
    String[] after() default {};
    int order() default 0;
}

經(jīng)過(guò)查看EchoFilter的Activate屬性,能夠看到其order = -110000,而ClassLoaderFilter的order=-30000,所以能夠判定,order值越小,其越位于調(diào)用端的最頂層。

以下:

@Activate(
    group = {"provider"},
    order = -110000
)
public class EchoFilter implements Filter {
    public EchoFilter() {
    }
    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {
        return (Result)(inv.getMethodName().equals("$echo") && inv.getArguments() != null && inv.getArguments().length == 1 ? new RpcResult(inv.getArguments()[0]) : invoker.invoke(inv));
    }
}
@Activate(
    group = {"provider"},
    order = -30000
)
public class ClassLoaderFilter implements Filter {
    public ClassLoaderFilter() {
    }
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        ClassLoader ocl = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(invoker.getInterface().getClassLoader());
        Result var4;
        try {
            var4 = invoker.invoke(invocation);
        } finally {
            Thread.currentThread().setContextClassLoader(ocl);
        }
        return var4;
    }
}

從上面能夠看出,若是須要規(guī)定自定義的Filter的執(zhí)行順序,能夠經(jīng)過(guò)設(shè)置自定義的Filter的@Active注解中order屬性值,越小越先執(zhí)行。

那么當(dāng)order相同時(shí)(都沒(méi)有設(shè)置時(shí)),又是根據(jù)什么排序的呢?

Collections.sort算法

從其說(shuō)明文檔能夠看出,這個(gè)算法是一個(gè)穩(wěn)定的排序算法,若是兩個(gè)值相同,不會(huì)改變其先后順序。而且從其文檔能夠看出,其所使用的是一個(gè)修改過(guò)的歸并排序算法。

可是Activate的compare方法故意將兩個(gè)相同的order類弄成了不一樣,致使排序有些變化。形成了最終上述順序。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产在线拍揄自揄视频不卡99 | 国产成人h福利小视频在线观看 | 人人鲁免费播放视频人人香蕉 | 综合网天天操天天射 | 亚洲美女一级片 | 日韩不卡视频在线观看 | 精品女同一区二区三区在线观看 | 亚洲一区免费视频 | 色屁屁一区二区三区视频国产 | 操操操干干 | 福利视频观看 | 99ri视频 | 奇米88888 | 国产亚洲成归v人片在线观看 | 成年人网站免费在线观看 | 日韩在线视频不卡一区二区三区 | 午夜激情免费视频 | 国产视频网 | 狠狠操天天射 | 精品国内视频 | 久草网免费 | 日韩亚洲人成网站在线播放 | 国产一区二区在线视频 | 亚洲性夜夜夜谢夜夜2019 | 欧美日韩国产在线一区 | 国产高清不卡视频 | 日日噜噜夜夜狠狠 | 草草视频在线观看最新 | 动漫美女h黄18动漫免费观看 | 亚州一级毛片在线 | 手机看片精品高清国产日韩 | miya亚洲私人影院在线 | 精品在线一区 | 精品欧美一区二区精品久久 | 中文字幕日韩一区二区不卡 | 成人福利视频网站 | 国产手机在线αⅴ片无码观看 | 日本人xxxⅹ18hd18hd | 国产精品视频在这里有精品 | 亚洲午夜在线观看 | 99在线免费视频 |