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

專注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ù)文檔推薦 >>
主站蜘蛛池模板: 成人久久18免费网站 | np饥渴放荡总受高hbl皇帝攻 | 91精品国产一区二区三区左线 | 香蕉成人国产精品免费看网站 | 中国黄色一级视频 | 免费在线日韩 | 国产片一级毛片视频 | 国产在线精品观看 | av区无码字幕中文色 | 午夜视频体验区 | 午夜激情在线 | 日韩男女做性高清在线观看 | 欧美成人精品一区二三区在线观看 | 欧美亚洲国产片在线观看 | 国产二区视频在线观看 | 男女啪啪后进式猛烈动态图 | 国产精品18久久久久网站 | 99精品视频在线观看免费专区 | 日韩免费高清视频网站 | 丁香色婷婷国产精品视频 | 在线观看国产一区二三区 | 亚洲欧美色视频 | 动漫成年美女黄漫网站国产 | 色综久久天天综合绕视看 | 免费一级毛片在线播放视频 | 国产精品国产三级在线专区 | 一级女性全黄久久生活片免费 | 最新日韩欧美不卡一二三区 | 国产伦精品一区二区 | 伊人在综合 | 97成人在线视频 | 国产网站91| 免费国产成人综合 | 视频区小说区图片区激情 | 日韩一区二区三区在线视频 | 免费精品国偷自产在线读大二 | www.亚洲精品 | 最近2019最新中文字幕3 | 黄色丝袜网站 | 青青青国产精品手机在线观看 | 天天躁狠狠躁夜躁2021 |