Dubbo的全域性Filter配置

2022-05-21 16:36:10 字數 2158 閱讀 5529

**:

前言:

之前也寫過dubbo的filter的文章, 後來和同事也有過交流, 才發生自己對dubbo的filter的機制, 還是存在一些誤解, 尤其是自定義filter的定位, 不是那麼清晰. 本文主要是補充一下, 自定義的filter如何成為全域性filter, 或者說, 它不需要在bean的定義申明中指定filter標籤.

前文回顧:

1. dubbo透傳traceid/logid的一種思路

2. dubbo的filter鏈梳理---分組可見和順序調整

3. dubbo的filter實戰--整合oval校驗框架

案列:

比如自定義filter, 如下:12

3456

78910

packagecom.test

publicclassstatfilterimplementsfilter

}

其需要做的額外工作如下:

在meta-inf/dubbo目錄下, 新增com.alibaba.dubbo.rpc.filter檔案, 其內容為

1statfilter=com.test.statfilter

而對於每個需要用到該filter的dubbo provider/consumer, 都需要在xml申明中新增filter標籤, 比如:

1

對於具體的乙個dubbo provider/consumer例項這種的配置, 絕對沒問題, 問題是如果要作用所有的dubbo provider/consumer例項, 這樣的copy/paste有點low.

全域性配置:

其實實現全域性配置, 非常的簡單, 一種方式是通過額外的配置, 一種通過指定@activate的group實現.

1. 額外的配置方式

以上文的案例為例, 在resource目錄下, 新增dubbo.properties檔案, 然後配置如下:12

34# 如果該filter要作用於為provider

dubbo.provider.filter=com.test.statfilter

# 如果該filter要作用於為consumer

dubbo.consumer.filter=com.test.statfilter

具體的目錄結果如下:

2. 指定@activate的group

這個方法, 就比較簡單了, 而且也不需要額外的配置檔案了12

3456

78910

1112

1314

1516

17packagecom.test

importcom.alibaba.dubbo.common.constants;

importcom.alibaba.dubbo.common.extension.activate;

@activate(

group = ,

order = -2000

)

publicclassstatfilterimplementsfilter

}

總結:

權當做筆記吧, 確實dubbo filter給了開發者很大自由度和空間.

dubbo中的Filter順序

最近發現dubbo的小 bug,順便整理了一下dubbo中的filter呼叫順序及如何確定的。服務提供方的過濾器被呼叫順序 echofilter classloaderfilter genericfilter contextfilter 這4個是在 中指定的 exceptionfilter time...

RequestBodyAdvice全域性配置請求引數

線上系統收到異常報警 org.springframework.http.converter.httpmessagenotreadableexception required request body is missing public,原因是請求的requestbody內容為空導致。處理方式有兩種 ...

SpringBoot 之Filter 常用配置方式

springboot 配置filter過濾器方式一 webfilter filtername urlfilter urlpatterns public class urlfilter implements filter override public void dofilter servletreq...