• 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注解

  • 相关阅读:
    2018-2019-2 网络对抗技术 20165230 Exp2 后门原理与实践
    BZOJ2038: [2009国家集训队]小Z的袜子(hose)
    BZOJ3262陌上花开 树状数组+Treap
    BZOJ1468 Tree 点分治入门练习题
    BZOJ2152 聪聪可可 点分治入门
    BZOJ3506 BZOJ1552 排序机械臂 Splay区间翻转(数组版自底向上的写法)
    BZOJ3196: Tyvj 1730 二逼平衡树 (线段树 + Treap 练习题)
    ZOJ2112 Dynamic Rankings 动态区间Kth(单点修改) 线段树+Treap写法
    OO第4单元总结&课程总结
    OO第三单无总结
  • 原文地址:https://www.cnblogs.com/qiaozhuangshi/p/11007080.html
Copyright © 2020-2023  润新知