Filter

1、添加默認過濾器

  1. 只有group屬性
@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;
    }
}
  1. 有group屬性和value屬性
@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

  1. 至於@Activate(group = "{provider, consumer}") 這種group有兩個的狀況下,傳入的gruop知足一個就好了.

2、添加普經過濾器

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" />

在針對某個請求過濾時用第一種定義種配置,全局使用的時候使用第二種配置

3、撤銷過濾器

有時候不想要特定的過濾器,怎麼辦呢,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個

服務暴露時的默認Filter

默認服務引用的時候知足條件的過濾器有3個
服務引用時的過濾器

小結:
1. 可使用@Activate激活或者配置文件激活兩種方式
2. 自定義的filter須要寫在com.alibaba.dubbo.rpc.Filter文件裏
3. 撤銷過濾器使用 filter標籤,使用減號加上過濾器擴展類的配置的別名

關於@Activate註解,請看Activate註解

相關文章
相關標籤/搜索