当前位置: 代码网 > it编程>编程语言>Java > dubbo3 filter(过滤器)如何自定义过滤器

dubbo3 filter(过滤器)如何自定义过滤器

2025年03月06日 Java 我要评论
dubbo3 filter(过滤器)简介类似于 java web 中的 filter也和 spring mvc 中的 intercaptor在请求的发送后或者是请求到达前集中的做一些预处理工作在 du

dubbo3 filter(过滤器)

简介

  1. 类似于 java web 中的 filter
  2. 也和 spring mvc 中的 intercaptor
  3. 在请求的发送后或者是请求到达前集中的做一些预处理工作
  4. 在 dubbo 中也会通过过滤器来完成限流和监控的工作

dubbo 过滤器运行时机

consumer 在调用的时候负载均衡已经选择了一个具体的实例进行调用,那么会依次执行 conusmer 端端调用链(调用链是 filter),然后到达 provider ,会继续执行 provider 的调用链(这里是 filter),完成响应的时候也会依次调用这些链

自定义 filter

在 dubbo 中自定义 filter 可以有两种方式。

第一种 @active 注解激活

在项目目录下面创建文件夹 meta-inf/dubbo 下面创建 filter 的权限定类名,(org.apache.dubbo.rpc.filter),然后在文件内部写入我们的注册信息,名字=自定义 filter 的权限定类名,注册成功以后需要激活我们的配置,@activate(group = commonconstants.provider)

myproviderfilter=com.rpc.dubbo.provider.filter.myproviderfilter

代码:

package com.rpc.dubbo.provider.filter;

import lombok.extern.slf4j.slf4j;
import org.apache.dubbo.common.constants.commonconstants;
import org.apache.dubbo.common.extension.activate;
import org.apache.dubbo.rpc.*;

/**
 * @author xl-9527
 * @since 2025/1/11
 **/
@slf4j
@activate(group = commonconstants.provider) // active 中 group 的设置是表示他运行在 consumer 还是 provider 端,这是必须要要配置的
public class myproviderfilter implements filter {

    /**
     * @param invoker    实际这次的调用
     * @param invocation 本次调用的参数
     * @return 调用结果,这里的调用结果是从 provider 端调用过来的
     */
    @override
    public result invoke(final invoker<?> invoker, final invocation invocation) throws rpcexception {
        system.out.println("invoker.geturl() = " + invoker.geturl());
        system.out.println("invocation.getmethodname() = " + invocation.getmethodname());
        system.out.println("invocation.getservicemodel().getservicename() = " + invocation.getservicemodel().getservicename());
        log.info("myproviderfilter invoke");
        return invoker.invoke(invocation);
    }
}

第二种使用 @dubboservice(filter=“key”)

这种方式需要直接在 service 中配置我们在 spi 中设置的 key

例如我们刚刚设置的 myproviderfilter(这里的源码服用了第一种里面的)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com