dubbo學習筆記(二)dubbo中的filter


dubbo框架提供了filter機制的擴展點(本文基於dubbo2.6.0版本)。

擴展接口

在dubbo-rpc模塊下的dubbo-rpc-api模塊下定義了Filter接口:org.apache.dubbo.rpc.Filter

dubbo自帶的filter

dubbo框架自帶了22個Filter。

在dubbo-rpc-api模塊提供了15個filter:

AccessLogFilter
ActiveLimitFilter
ClassLoaderFilter
CompatibleFilter
ConsumerContextFilter
ContextFilter
DeprecatedFilter
EchoFilter
ExceptionFilter
ExecuteLimitFilter
GenericFilter
GenericImplFilter
TimeoutFilter
TokenFilter
TpsLimitFilter

dubbo-rpc-default模塊提供了2個filter:

FutureFilter
TraceFilter

dubbo-filter模塊有2個子模塊,提供了2個filter:

dubbo-filter-cache提供了1個Filter:CacheFilter
dubbo-filter-validation提供了1個Filter:ValidationFilter

dubbo-test-examples提供了1個filter:

LogFilter

dubbo-spring-config提供了1個filter:

MockFilter

dubbo-monitor-api提供了1個filter:

MonitorFilter

Filter加載

dubbo應用啟動時,通過ProtocolFilterWrapper#buildInvokerChain構建了filter的調用鏈。
啟用demo應用,在buildInvokerChain方法的List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group);下一行打個斷點,
在調試窗口看觀察List<Filter> filters的值,

provider端:

consumer端:

Filter加載順序

系統自帶的filter,上面的圖可以可以看到,
provider端:EchoFilter->ClassLoaderFilter->GenericFilter->ContextFilter->TraceFilter->TimeoutFilter->MonitorFilter->ExceptionFilter
consumer端:ConsumerContextFilter->FutureFilter->MonitorFilter

@Active注解定義了Filter的位置和順序,其中group屬性定義了該Filter用於Provider或Consumer端,order屬性定義了Filter的絕對順序(數值小的排在前面)。

EchoFilter為例

@Activate(group = Constants.PROVIDER, order = -110000)
public class EchoFilter implements Filter {
    ...
}

表示在Provder端使用,絕對順序為-110000。

ClassLoaderFilter

@Activate(group = Constants.PROVIDER, order = -30000)
public class ClassLoaderFilter implements Filter {
...
}

表示在Provder端使用,絕對順序為-30000,值比-110000大,因此在EchoFilter的后面調用。

Filter功能

  • EchoFilter

回聲測試。

  • ExceptionFilter

異常處理。


參考:
http://dubbo.apache.org/zh-cn/docs/dev/impls/filter.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM