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

2025-03-06 17:50

本文主要是介绍dubbo3 filter(过滤器)如何自定义过滤器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进...

dubbo3 filter(过滤器)

简介

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

dubbo 过滤器运行时机

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

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程China编程(www.chinasem.cn)。

这篇关于dubbo3 filter(过滤器)如何自定义过滤器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153663

相关文章

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)

《SpringBoot拦截器Interceptor与过滤器Filter详细教程(示例详解)》本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程1. 概述1

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...