java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > dubbo3 filter自定义过滤器

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

作者:帅气的人123

dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进行预处理工作,完成限流和监控,在dubbo中,过滤器运行在consumer和provider两端,分别在调用链中执行

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(这里的源码服用了第一种里面的)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文