zoukankan      html  css  js  c++  java
  • Filter

    一、添加默认过滤器

    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;
        }
    }
    

    然后需要配置过滤器的扩展类

    com.alibaba.dubbo.rpc.Filter

    myFilter=per.qiao.myprotocol.filter.MyFitler
    

    对于第一种情况,就已经完成了配置。在调用服务的时候就会执行那个过滤器

    对于第二种情况,你需要配置一个变量,它需要等于filter或者以.filter结尾

    比如这种就可以了 filter作为服务端发布的一个参数,在URL中会显示为server.filter(以.filter结尾)

    <dubbo:service interface="per.qiao.service.TestService" ref="serviceImpl" timeout="600000" protocol="dubbo" filter="myFilter" >
    

    怎么说呢,不推荐使用value属性,dubbo没有预留一个参数来设置这个属性也就是不能个性化的设置,所以就不用为好
    3. 至于@Activate(group = "{provider, consumer}") 这种group有两个的情况下,传入的gruop满足一个就行了.

    二、添加普通过滤器

    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;
        }
    }
    

    然后需要配置过滤器的扩展类

    com.alibaba.dubbo.rpc.Filter

    myFilter=per.qiao.myprotocol.filter.MyFitler
    

    spring配置

    <!-- 1、配置在service上 -->
    <dubbo:service interface="per.qiao.service.TestService" ref="serviceImpl" timeout="600000" protocol="dubbo" filter="myFilter" >
    <!-- 2、配置为全局参数 -->
    <dubbo:provider filter="myFilter" />
    

    在针对某个请求过滤时用第一种定义种配置,全局使用的时候使用第二种配置

    三、撤销过滤器

    有时候不想要特定的过滤器,怎么办呢,dubbo给出了处理方法。

    在配置filter时,我们可以使用xml来控制。

    spring配置

    <!-- 1、添加一个自定义的过滤器myFilter,去掉一个系统默认的过滤器monitor -->
    <dubbo:service interface="per.qiao.service.TestService" ref="serviceImpl" timeout="600000" protocol="dubbo" filter="myFilter,-monitor" >
    </dubbo:service>
    
    <!-- 2、 全局过滤器 添加一个自定义的和删除一个不用的-->
    <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注解

  • 相关阅读:
    Android开发效率—Eclipse快捷键
    Android学习笔记之AndroidManifest.xml文件解析
    Android开发环境的安装 Eclipse
    运用CodeSmith Studio实现C#项目构架
    使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html
    C# winFrom 制作、打包、签名、发布Activex全过程
    C# Server.MapPath()
    PowerDesigner导出表到word
    powerdesigner 15 如何导出sql schema
    PowerDesigner15使用时的十五个问题
  • 原文地址:https://www.cnblogs.com/qiaozhuangshi/p/11007080.html
Copyright © 2011-2022 走看看