dubbo 自定义filter

dubbo 自定义filter 实现公用过滤器处理 Dubbo的Filter机制,是专门为服务提供方和服务消费方调用过程进行拦截设计的,每次远程方法执行,该拦截都会被执行。这样就为开发者提供了非常方便的扩展性,比如为dubbo接口实现ip白名单功能、监控功能等等。 怎样添加filter? 1. 基于xml配置文件配置filter   1、自定义Filter,必须继承com.alibaba.dubbo.rpc.Filter接口   2、在resources目录下添加纯文本文件META-INF/dubbo/com.alibaba.dubbo.rpc.Fil 阅读详情

目的

通过自定义filter,在dubbo接口被调用的时候,打印入参信息、请求接口名称和返回值信息,这样可以避免在每个接口中手动打印接口请求的入参等日志,实现统一打印日志的方式有多种,这里只是为了学习自定义filter,所以以这个为例

应用

要实现自定义filter,需要有以下几个步骤

1.自定义filter实现类
@Activate(group = "provider")
public class DubboProviderLogFilter implements Filter {
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        System.out.println(
                "打印日志:interface:" + invoker.getInterface().getSimpleName() + ";methodName:" + invocation.getMethodName()
                        + ";argument:" + invocation.getArguments());
        Result result = invoker.invoke(invocation);
        System.out.println("打印返回结果");
        System.out.println(result != null ? result.getValue() : "返回结果为空");
        return result;
    }
}
2.配置filter

在这里插入图片描述

这里的目录不能错,并且必须是这种样子的
在这里插入图片描述
这里踩了一个坑,在启动的时候,一直提示

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'providers:dubbo:xxx': Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'filter' threw exception; nested exception is java.lang.IllegalStateException: No such extension requestFilter for filter/com.alibaba.dubbo.rpc.Filter
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1650)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1357)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
	at 
Caused by: org.springframework.beans.PropertyBatchUpdateException: Failed properties: Property 'filter' threw exception; nested exception is java.lang.IllegalStateException: No such extension requestFilter for filter/com.alibaba.dubbo.rpc.Filter
	at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:123)
	at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:77)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1646)
	... 16 common frames omitted

这个报错,最后,根据 dubbo启动失败 这个同学的博客,才发现,原来是META-INF.dubbo.internal的目录有问题

dubbo指定了三个路径可以设置自定义filter,dubbo在启动的时候,会从这三个目录下去加载filter信息,分别是:

loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY);
loadDirectory(extensionClasses, DUBBO_DIRECTORY);
loadDirectory(extensionClasses, SERVICES_DIRECTORY);

private static final String SERVICES_DIRECTORY = "META-INF/services/";

private static final String DUBBO_DIRECTORY = "META-INF/dubbo/";

private static final String DUBBO_INTERNAL_DIRECTORY = DUBBO_DIRECTORY + "internal/";
3.使filter生效

有三种方式
1.上面自定义filter,在filter实现类添加@Activate(group = “provider"注解,并指定服务提供者还是消费者端生效
2.如果不设置该注解,可以在服务提供者的注解中设置filter属性
在这里插入图片描述
3.在xml配置文件中,统一设置filter
<dubbo:provider filter=”"/>或<dubbo:consumer filter=""/> 通过filter来配置要使用的filter,这种是针对所有的服务提供者或者服务消费者

4. 服务提供者代码
@Service(timeout = 3500)
public class ProviderServiceImpl implements ProviderService {
    @Override
    public Order getOrderById(Integer orderId) {
        System.out.println("orderId是:" + orderId);
        Order order = new Order(1, "testOrderType", "testOrderName");
        return order;
    }
}
5.效果
打印日志:interface:ProviderService;methodName:getOrderById;argument:[Ljava.lang.Object;@47a504d4
orderId是:1
打印返回结果
Order{orderId=1, orderType='testOrderType', orderName='testOrderName'}

这样的话,就可以通过filter机制,在dubbo服务调用的时候,统一打印日志,无需在每次新增dubbo接口的时候,记录日志
同理,也可以自定义filter,统一对异常进行处理 等等

dubbo 自定义过滤器 阅读详情

相关推荐

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移”

本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。

weixin_30635053的博客 711

详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)

详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)

健身变秃,coding变强 3834

Linux初级介绍之番外篇:Linux挂载windows中的共享目录

挂载windows共享目录Windows端共享权限设定解禁Guest设置共享目录权限Linux挂载端扫描共享目录挂载共享目录遇到错误的解决方案 Windows端共享权限设定 解禁Guest 右击我的电脑选择管理–>本地用户和组–>在用户项中双击Guest用户–>取消账号已禁用选项 设置共享目录权限 右击共享目录点属性–>在共享页面中点击共享选项–>下拉选择共享对象为Everyone–>点击共享按钮 3.设置本地策略 打开命令框–>输入secpol.msc–&gt

m0_53497201的博客 228

Dubbo 自定义 Filter 编码实例

编写dubbo自定义filter,在Rpc调用过程中加入自己的逻辑

咖啡煮码 1449

halcon 深度学习标注_Halcon deep learning之目标检测笔记(一)

设置输入输出的路径输入路径有两个,一个是图像路径HalconImageDir,一个是Json文件路径PillBagJsonFile。这两个参数用于后续在图像路径中读取coco文件。输出路径首先定义一个新的文件夹路径,用于存放样本和模型文件等数据。设置基于深度学习的目标检测模型的路径,该模型文件以.hdl结尾。设置样本数据文件夹ExampleDataDir:'detect_pills_data'数据...

weixin_27885313的博客 2699

从分立到集成:深入解析Buck电路的核心模块与设计权衡

本文深入解析Buck电路的核心模块与设计权衡,从分立到集成方案的优缺点对比。详细探讨Buck电路的高效能量转换、小型化设计及灵活电压调节能力,并结合实际案例分享分立方案中的PWM生成、反馈环路设计及保护电路优化经验,为工程师提供实用设计参考。

weixin_29306317的博客 224

【dubbo】自定义filter打印接口请求日志

Data注解@Activate中的group参数用以指定filter生效范围,此处同时添加了provider和consumer,那么应用调用dubbo接口和自身对外提供的dubbo接口被调用时会打印日志。

xst_3300 1077

Windows服务器SSL漏洞修复实战:如何一键禁用TLS 1.0/1.1避免SWEET32攻击

本文提供了Windows服务器修复SWEET32漏洞的实战指南。通过组策略编辑器,详细讲解如何一键禁用不安全的TLS 1.0/1.1协议,并优化密码套件顺序,以消除由3DES等弱加密算法带来的安全风险。文章还涵盖了应对SQL Server等应用兼容性挑战的解决方案,以及企业级批量部署的脚本化方法,帮助管理员系统性地提升服务器TLS/SSL安全配置。

weixin_29310631的博客 246

dubbo自定义filter,报No such extension xxxFilter for filter/com.alibaba.dubbo.rpc.Filter错误

前言 最近在学习dubbo的filter时候,根据dubbo的开发手册,自定义了一个filter,然后配置,结果控制台报 No such extension xxxFilter for filter/com.alibaba.dubbo.rpc.Filter错误。特此记录。 自定义filter 首先定义filter,需要实现com.alibaba.dubbo.rpc.Filter接口 /** ...

1万+

从零到一:3D-ResNet50在医学影像中的实战陷阱与避坑指南

本文深入探讨了3D-ResNet50在医学影像分类中的实战应用,重点解析了NIFTI数据预处理、小样本迁移学习陷阱及GPU显存优化等关键问题。通过分块加载、混合精度训练等技巧,有效解决了医学影像处理中的内存管理和性能挑战,为开发者提供了实用的避坑指南和优化策略。

weixin_29038345的博客 391

【硬核指南/MI50 32G/Ubuntu】从零部署大模型:MI50显卡Ubuntu系统驱动安装与避坑全记录

本文详细记录了在Ubuntu系统上为AMD MI50显卡安装驱动并部署大模型的完整流程,包括硬件兼容性检查、BIOS关键设置、系统安装优化、ROCm驱动安装及常见问题解决方案。特别针对MI50显卡在X99平台上的特殊配置需求提供了实用技巧,帮助用户避免常见陷阱,提升大模型训练效率。

weixin_42520909的博客 806

Dubbo自定义Filter源码解析

Dubbo自定义Filter实现与原理解析 本文深入剖析了Dubbo自定义Filter的实现机制与核心原理。首先介绍了两种使用方式:通过SPI配置实现全局生效,或通过注解指定局部生效。其次揭示了底层责任链模式的设计,包括链表构建、节点结构和执行流程三大模块。重点分析了Filter链从尾往前构建的逻辑,以及节点解耦设计。最后通过GrpcFilter实战案例,展示了权限校验的具体实现,包括请求参数验证和异常处理机制。该机制为Dubbo服务提供了强大的扩展能力,可灵活实现日志记录、权限控制等功能。

weixin_43829708的博客 783

关键!C#工业上位机界面设计终极指南:WinForm/WPF怎么选?【工业实战完整版,无废话选型+避坑+落地技巧】

工业上位机UI选型指南:WinForm与WPF核心对比 摘要: 本文基于工业实战视角,对比WinForm与WPF在工业上位机开发中的适用性。WinForm凭借GDI+原生渲染、极致兼容性(完美支持Win7/XP)、低资源占用和硬件底层调用优势,成为老旧工控机、简单监控系统和7×24小时运行设备的首选。WPF则依托DirectX硬件加速、MVVM架构和强大可视化能力,更适合复杂可视化大屏、3D模拟等高端场景及需要长期迭代的大型项目。核心选型原则是:优先考虑稳定性与兼容性,WinForm解决"能不能用

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 729

给Dubbo添砖加瓦:自定义Filter扩展点实现!

最近一个小伙伴在开发一款小而美的应用程序性能监控框架(Pepper-Metrics)。 其中一个需求,需要收集Dubbo在Provider端和Consumer端的接口响应性能数据,以便存储到DataSource中或提供给Printer使用。 在此背景下,我们需要对Provider端和Consumer端的每一次请求和响应进行监控。在Dubbo中,可以通过扩展org.apache.dubbo.rp...

mifffy_java的博客 3213

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Dubbo自定义扩展Filter

Dubbo自定义扩展Filter

qq_36070104的博客 752

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringCloudAlibaba学习系列(2)dubbo自定义Filter

目录 一、简介 二、实战 1、创建filter类 2、配置Filter文件 3、配置dubbo 4、查看效果 5、配置service的Filter 5、service剔除provider统一配置的Filter 三、other 一、简介 我们再开发web应用的时候,通常会需要继承javax.servlet.Filter的接口类来实现统一拦截请求进行处理的功能,如鉴权、日志、Xss攻击拦截等。那么在微服务dubbo框架处理RPC请求的时候,我们是否也有这样的需求,需要对远程...

菜鸟学飞 1250

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

dubbo 自定义 Filter

通过自定义 Filter,可以在 dubbo 调用链中加入特定的逻辑,比如埋点分析调用链。 1. 新建 Filter 类 // @Activate(group = {Constants.CONSUMER}) public class MyFilter implements Filter { public Result invoke(Invoker<?> invoke...

weixin_30909575的博客 321

Dubbo中Filter过滤器,拦截器的实现原理,实现自定义的Filter过滤器

我们知道Dubbo中大部分的实现类加载都是通过SPI实现,同样Dubbo也提供了Filter机制,这个部分研究下怎么实现了,是怎样的一个调用逻辑。 首先我们看下Dubbo中Filter的定义: * Filter Chain in 3.x * * -> Filter -> Invoker * * Proxy -> ClusterFilter -> ClusterInvoker -> Fil

LeoHan 5157

dubbo 2.7.3 自定义filter 与 远程调用

dubbo 2.7.3 自定义filter 与 远程调用 前言使用@Reference注解调用服务dubbo 自定义filter原创博文,转载请说明出处。谢谢! 前言 编写这篇文章主要目的是为了记住在使用dubbo过程中的一些注意事项,本文描述的问题都是基于dubbo2.7.3+springboot+zookeeper中遇到的,对于dubbo 2.7.x同样适用。 使用@Reference注解调用...

qq_24612753的博客 1710

dubbo自定义Filter,传递隐式参数

摘要:本文详细介绍了在Dubbo 2.6.0中实现A→B服务间隐式参数传递的完整方案。通过在消费方(A)和服务方(B)分别配置Filter和RpcContext实现:1)A端通过DubboConsumerContextFilter将参数存入RpcContext;2)B端通过DubboProviderContextFilter接收参数并使用TransmittableThreadLocal存储,解决线程池/异步场景下的上下文传递问题。文中包含Filter实现、配置方法以及DubboContextHolder工具

木辰風的博客 293

Dubbo自定义Filter统一处理异常

Dubbo自定义Filter统一处理异常

wangchaoqi1985的博客 347

dubbo引用自定义filter

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'providers:dubbo:xxx': Error setting property values; nested exception is org.springframework.beans.PropertyBatc...

biaoge20150414的专栏 1618

Dubbo 自定义Filter实现日志追踪

Dubbo 自定义Filter实现日志追踪

飞一站的博客 1039

SpringCloud+Dubbo实现自定义Filter,关键配置避免启动过滤器无效

直接上代码,服务提供方 package com.weifor.xx.api.dubbo; import com.weifor.util.WeiFor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.rpc.*; im

PangSir的专栏 1837

dubbo自定义mysql拦截器_[Dubbo开发]Dubbo拦截器(Filter)初探

Dubbo拦截器实现的原理,我的理解就是实现或扩展Dubbo自己的Filter接口(LogFilter implements Filter),然后将这个类在配置文件(META-INF/dubbo/com.alibaba.dubbo.rpc.Filter文本文件)中与一个名称对应(logFilter),然后在dubbo配置文件中对需要增加拦截器的bean进行配置。我在之前自己搭建的消费者当中实现了一...

weixin_39927848的博客 242

如何利用dubbo的filter来处理自定义异常

有时候项目里会自定义异常来处理一些逻辑上的特定问题,此时可以利用自定义的异常捕捉filter来对所有的dubbo接口进行统一处理。 具体的filter代码如下: 自定义的filter需要继承ListenableFilter。 @Activate @Slf4j public class DubboFilter extends ListenableFilter{ public DubboFilter() { super.listener = new DubboFilter.Except

weixin_45614626的博客 963
上一篇: springmvc应用-自定义参数解析器
下一篇: spring源码 第二个后置处理器方法的使用-推断构造函数
小小少年_
博客等级 码龄10年 63粉丝 146原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值