Dubbo的全局Filter配置

 

前言:
  以前也寫過dubbo的filter的文章, 後來和同事也有過交流, 才發生本身對dubbo的filter的機制, 仍是存在一些誤解, 尤爲是自定義filter的定位, 不是那麼清晰. 本文主要是補充一下, 自定義的filter如何成爲全局filter, 或者說, 它不須要在bean的定義申明中指定filter標籤.html

 

前文回顧:
  1. Dubbo透傳traceId/logid的一種思路 
  2. Dubbo的Filter鏈梳理---分組可見和順序調整 
  3. Dubbo的Filter實戰--整合Oval校驗框架 java

 

案列:
  好比自定義filter, 以下:框架

package com.test

public class StatFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
       return invoker.invoke(invocation);
    }

}

  其須要作的額外工做以下:
  在META-INF/dubbo目錄下, 添加com.alibaba.dubbo.rpc.Filter文件, 其內容爲ide

statFilter=com.test.StatFilter

  而對於每一個須要用到該filter的dubbo provider/consumer, 都須要在xml申明中添加filter標籤, 好比:xml

<dubbo:reference id="echoService" check="false" interface="com.test.EchoService" filter="statFilter" />

  對於具體的一個dubbo provider/consumer實例這種的配置, 絕對沒問題, 問題是若是要做用全部的dubbo provider/consumer實例, 這樣的copy/paste有點low.htm

 

全局配置:
  其實實現全局配置, 很是的簡單, 一種方式是經過額外的配置, 一種經過指定@Activate的group實現.
  1. 額外的配置方式
  以上文的案例爲例, 在resource目錄下, 添加dubbo.properties文件, 而後配置以下:blog

# 若是該filter要做用於爲provider
dubbo.provider.filter=com.test.StatFilter
# 若是該filter要做用於爲consumer
dubbo.consumer.filter=com.test.StatFilter

  具體的目錄結果以下:
  
  2. 指定@Activate的group
  這個方法, 就比較簡單了, 並且也不須要額外的配置文件了開發

package com.test

import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;

@Activate(
        group = {Constants.PROVIDER, Constants.CONSUMER},
        order = -2000
)
public class StatFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
       return invoker.invoke(invocation);
    }

}

  

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

相關文章
相關標籤/搜索