本文主要是介绍dubbo3 filter(过滤器)如何自定义过滤器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进...
dubbo3 filter(过滤器)
简介
- 类似于 Java web 中的 filter
- 也和 spring mvc 中的 intercaptor
- 在请求的China编程发送后或者是请求到达前集中的做一些预处理工作
- 在 dubbo 中也会通过过滤器来完成限流和监控的工作
dubbo 过滤器运行时机
consumer 在调用的时候负载均衡已经选择了一个具体的实例进行调用,那么会依次执行 conusmer 端端调用链(调用js链是 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
代码:
packawww.chinasem.cnge 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.getMethodNamChina编程e()); System.out.println("invocation.getServiceModel().getServiceNjsame() = " + invocation.getServiceModel().getServiceName()); log.info("MyProviderFilter invoke"); return invoker.invoke(invocation); } }
第二种使用 @DubboService(filter=“key”)
这种方式需要直接在 service 中配置我们在 SPI 中设置的 key
例如我们刚刚设置的 myProviderFilter(这里的源码服用了第一种里面的)
总结
这篇关于dubbo3 filter(过滤器)如何自定义过滤器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!