91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Dubbo Provider Filter鏈是怎么構建的

發布時間:2021-12-15 14:54:33 來源:億速云 閱讀:131 作者:iii 欄目:大數據

這篇文章主要介紹“Dubbo Provider Filter鏈是怎么構建的”,在日常操作中,相信很多人在Dubbo Provider Filter鏈是怎么構建的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Dubbo Provider Filter鏈是怎么構建的”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

provider端的Filter鏈構建是在初始化流程中構建的,我們知道初始化流程肯定會走到方法org.apache.dubbo.remoting.transport.netty4.NettyServer#doOpen中,可以在該方法打個斷點,然后啟動provider服務,調用棧信息如下:

Dubbo Provider Filter鏈是怎么構建的

從調用棧中方法 org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper#export 代碼來看,buildInvokerChain會構建provider的Filter鏈:

public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {
    if (UrlUtils.isRegistry(invoker.getUrl())) {
        return protocol.export(invoker);
    }
    // invoker就是直接調用對應方法的代碼,JavassistProxyFactory
    return protocol.export(buildInvokerChain(invoker, SERVICE_FILTER_KEY, CommonConstants.PROVIDER));
}
 

從上述代碼來看,buildInvokerChain就是構建Filter鏈的邏輯,通過SPI方式進行加載,FIlter配置路徑為META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter,配置內容如下:

echo=org.apache.dubbo.rpc.filter.EchoFilter
generic=org.apache.dubbo.rpc.filter.GenericFilter
genericimpl=org.apache.dubbo.rpc.filter.GenericImplFilter
token=org.apache.dubbo.rpc.filter.TokenFilter
accesslog=org.apache.dubbo.rpc.filter.AccessLogFilter
activelimit=org.apache.dubbo.rpc.filter.ActiveLimitFilter
classloader=org.apache.dubbo.rpc.filter.ClassLoaderFilter
context=org.apache.dubbo.rpc.filter.ContextFilter
consumercontext=org.apache.dubbo.rpc.filter.ConsumerContextFilter
exception=org.apache.dubbo.rpc.filter.ExceptionFilter
executelimit=org.apache.dubbo.rpc.filter.ExecuteLimitFilter
deprecated=org.apache.dubbo.rpc.filter.DeprecatedFilter
compatible=org.apache.dubbo.rpc.filter.CompatibleFilter
timeout=org.apache.dubbo.rpc.filter.TimeoutFilter
 

注意,上述配置的Filter是包括Consumer和Provider的,初始化provider只會用到provider側的Filter配置,具體Filter實現類會通過group來區分PROVIDER或者CONSUMER,對應的buildInvokerChain邏輯如下:

private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) {
    Invoker<T> last = invoker;
    List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group);

    if (!filters.isEmpty()) {
        for (int i = filters.size() - 1; i >= 0; i--) {
            final Filter filter = filters.get(i);
            final Invoker<T> next = last;
            last = new Invoker<T>() {
                @Override
                public Result invoke(Invocation invocation) throws RpcException {
                    return filter.invoke(next, invocation);
                }
            };
        }
    }
    return last;
}
 

buildInvokerChain邏輯會按照順序進行構建Filter過濾鏈,由于FIlter實現類未設置@Activate注解的順序,因此Filter過濾鏈的前后順序就是在META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter文件配置的順序,這點要注意。

到此,關于“Dubbo Provider Filter鏈是怎么構建的”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

六枝特区| 翁源县| 航空| 徐闻县| 广德县| 靖宇县| 泾阳县| 罗源县| 桂平市| 沧源| 洪泽县| 会东县| 余江县| 张家口市| 普宁市| 华容县| 手机| 乾安县| 恩平市| 南阳市| 剑川县| 贵定县| 西吉县| 卢龙县| 高阳县| 永安市| 高邮市| 北辰区| 铅山县| 博湖县| 麻城市| 喜德县| 宜昌市| 东方市| 神农架林区| 治多县| 营山县| 湖州市| 益阳市| 崇礼县| 桃园市|