Dubbo的全局Filter配置
前言:
之前也写过dubbo的filter的文章, 后来和同事也有过交流, 才发生自己对dubbo的filter的机制, 还是存在一些误解, 尤其是自定义filter的定位, 不是那么清晰. 本文主要是补充一下, 自定义的filter如何成为全局filter, 或者说, 它不需要在bean的定义申明中指定filter标签.
前文回顾:
1. Dubbo透传traceId/logid的一种思路
2. Dubbo的Filter链梳理---分组可见和顺序调整
3. Dubbo的Filter实战--整合Oval校验框架
案列:
比如自定义filter, 如下:
1 2 3 4 5 6 7 8 9 10 | package com.test public class StatFilter implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { return invoker.invoke(invocation); } } |
其需要做的额外工作如下:
在META-INF/dubbo目录下, 添加com.alibaba.dubbo.rpc.Filter文件, 其内容为
1 | statFilter=com.test.StatFilter |
而对于每个需要用到该filter的dubbo provider/consumer, 都需要在xml申明中添加filter标签, 比如:
1 | <dubbo:reference id= "echoService" check= "false" interface = "com.test.EchoService" filter= "statFilter" /> |
对于具体的一个dubbo provider/consumer实例这种的配置, 绝对没问题, 问题是如果要作用所有的dubbo provider/consumer实例, 这样的copy/paste有点low.
全局配置:
其实实现全局配置, 非常的简单, 一种方式是通过额外的配置, 一种通过指定@Activate的group实现.
1. 额外的配置方式
以上文的案例为例, 在resource目录下, 添加dubbo.properties文件, 然后配置如下:
1 2 3 4 | # 如果该filter要作用于为provider dubbo.provider.filter=com.test.StatFilter # 如果该filter要作用于为consumer dubbo.consumer.filter=com.test.StatFilter |
具体的目录结果如下:
2. 指定@Activate的group
这个方法, 就比较简单了, 而且也不需要额外的配置文件了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package com.test import com.alibaba.dubbo.common.Constants; import com.alibaba.dubbo.common.extension.Activate; @Activate ( group = {Constants.PROVIDER, Constants.CONSUMER}, order = - 2000 ) public class StatFilter implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { return invoker.invoke(invocation); } } |
总结:
权当做笔记吧, 确实dubbo filter给了开发者很大自由度和空间.
posted on 2018-07-13 17:00 mumuxinfei 阅读(7174) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构