**:
前言:
之前也寫過dubbo的filter的文章, 後來和同事也有過交流, 才發生自己對dubbo的filter的機制, 還是存在一些誤解, 尤其是自定義filter的定位, 不是那麼清晰. 本文主要是補充一下, 自定義的filter如何成為全域性filter, 或者說, 它不需要在bean的定義申明中指定filter標籤.
前文回顧:
1. dubbo透傳traceid/logid的一種思路
2. dubbo的filter鏈梳理---分組可見和順序調整
3. dubbo的filter實戰--整合oval校驗框架
案列:
比如自定義filter, 如下:12
3456
78910
package
com.test
public
class
statfilter
implements
filter
}
其需要做的額外工作如下:
在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
17package
com.test
import
com.alibaba.dubbo.common.constants;
import
com.alibaba.dubbo.common.extension.activate;
@activate
(
group = ,
order = -
2000
)
public
class
statfilter
implements
filter
}
總結:
權當做筆記吧, 確實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...