@Activate(group = "provider") public class MyFitler implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { Map<String, String> attachments = invocation.getAttachments(); System.out.println("自定義過濾器調用啦==============================="); System.out.println("傳遞到服務端的參數有:" + attachments); Result invoke = invoker.invoke(invocation); return invoke; } }
@Activate(group = "provider", value="filter") public class MyFitler implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { Map<String, String> attachments = invocation.getAttachments(); System.out.println("自定義過濾器調用啦==============================="); System.out.println("傳遞到服務端的參數有:" + attachments); Result invoke = invoker.invoke(invocation); return invoke; } }
而後須要配置過濾器的擴展類java
com.alibaba.dubbo.rpc.Filterspring
myFilter=per.qiao.myprotocol.filter.MyFitler
對於第一種狀況,就已經完成了配置。在調用服務的時候就會執行那個過濾器ide
對於第二種狀況,你須要配置一個變量,它須要等於filter或者以.filter結尾code
好比這種就能夠了 filter做爲服務端發佈的一個參數,在URL中會顯示爲server.filter(以.filter結尾)server
<dubbo:service interface="per.qiao.service.TestService" ref="serviceImpl" timeout="600000" protocol="dubbo" filter="myFilter" >
怎麼說呢,不推薦使用value屬性,dubbo沒有預留一個參數來設置這個屬性也就是不能個性化的設置,因此就不用爲好xml
public class MyFitler implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { Map<String, String> attachments = invocation.getAttachments(); System.out.println("自定義過濾器調用啦==============================="); System.out.println("傳遞到服務端的參數有:" + attachments); Result invoke = invoker.invoke(invocation); return invoke; } }
而後須要配置過濾器的擴展類htm
com.alibaba.dubbo.rpc.Filterblog
myFilter=per.qiao.myprotocol.filter.MyFitler
spring配置rpc
<!-- 一、配置在service上 --> <dubbo:service interface="per.qiao.service.TestService" ref="serviceImpl" timeout="600000" protocol="dubbo" filter="myFilter" > <!-- 二、配置爲全局參數 --> <dubbo:provider filter="myFilter" />
在針對某個請求過濾時用第一種定義種配置,全局使用的時候使用第二種配置
有時候不想要特定的過濾器,怎麼辦呢,dubbo給出了處理方法。
在配置filter時,咱們可使用xml來控制。
spring配置
<!-- 一、添加一個自定義的過濾器myFilter,去掉一個系統默認的過濾器monitor --> <dubbo:service interface="per.qiao.service.TestService" ref="serviceImpl" timeout="600000" protocol="dubbo" filter="myFilter,-monitor" > </dubbo:service> <!-- 二、 全局過濾器 添加一個自定義的和刪除一個不用的--> <dubbo:provider filter="myFilter,-monitor" />
假若你向去掉全部的默認過濾器(自定義被@Activate標識的且被容器dubbo加載的也算默認過濾器),那麼你能夠配置filter="-default";
-號表明刪除過濾器,不寫-就是添加
默認服務暴露的時候知足條件的過濾有9個
默認服務引用的時候知足條件的過濾器有3個
小結:
1. 可使用@Activate激活或者配置文件激活兩種方式
2. 自定義的filter須要寫在com.alibaba.dubbo.rpc.Filter文件裏
3. 撤銷過濾器使用 filter標籤,使用減號加上過濾器擴展類的配置的別名
關於@Activate註解,請看Activate註解