dubbo调用的自定义过滤器中设置MDC无法生效的问题

news2024/11/26 16:40:36

AI的解释

Dubbo自定义过滤器不生效可能有多种原因,以下是一些常见的原因及解决方法:

  1. 过滤器未正确配置
    • 检查过滤器是否已经在Dubbo的配置文件中正确声明,并且已经添加到过滤器链中。在XML配置中,应使用<dubbo:service><dubbo:reference>标签的filter属性来指定过滤器。
    • 确保过滤器的名称没有拼写错误,并且与实现类的名称一致。
  2. 资源目录问题
    • Dubbo在运行时会查找META-INF/dubbo目录下的SPI扩展机制。如果资源目录结构不正确,过滤器可能无法正常加载。确保META-INF/dubbo目录结构正确,并且包含正确的过滤器配置文件。
  3. 过滤器实现问题
    • 检查自定义过滤器的实现是否正确。确保过滤器类已经正确实现了Filter接口,并且invoke方法逻辑没有问题。
    • 如果过滤器依赖于其他组件或服务,确保这些依赖项已经正确配置和初始化。
  4. 类加载器问题
    • 在某些复杂的项目结构中,可能存在多个类加载器,导致Dubbo无法正确加载自定义过滤器。检查项目的类加载器配置,确保自定义过滤器能够被正确加载。
  5. 版本兼容性问题
    • 如果使用的Dubbo版本与自定义过滤器的实现不兼容,可能会导致过滤器不生效。检查Dubbo的官方文档或更新日志,确保自定义过滤器与当前使用的Dubbo版本兼容。
  6. 日志和调试
    • 开启Dubbo的详细日志记录,查看是否有关于过滤器加载或调用的相关信息。这有助于定位问题所在。
    • 使用调试工具逐步跟踪过滤器的加载和调用过程,检查是否有异常或错误发生。

如果以上方法都无法解决问题,建议查阅Dubbo的官方文档或社区论坛,寻找更具体的解决方案或向其他开发者寻求帮助。同时,确保你的Dubbo版本是最新的,或者至少是一个稳定且被广泛使用的版本,因为旧版本可能存在已知的bug或不兼容性问题。

这里面有个SPI机制实现,通过SPI机制原理,在项目中添加文件配置后就可以了

package ecan.netapp.common;

import ecan.netapp.util.CommonUtil;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.ListenableFilter;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcContext;
import org.slf4j.MDC;

@Activate(group = {CommonConstants.PROVIDER,CommonConstants.CONSUMER})
public class TraceIdFilter extends ListenableFilter {


   @Override
   public Result invoke(org.apache.dubbo.rpc.Invoker<?> invoker, org.apache.dubbo.rpc.Invocation invocation) throws org.apache.dubbo.rpc.RpcException {
      String traceId = RpcContext.getContext().getAttachment("traceId");
      if ( !CommonUtil.isEmpty(traceId) ) {
         // *) 从RpcContext里获取traceId并保存
         TraceIdUtils.setTraceId(traceId);
         MDC.put("traceId", traceId);
      } else {
         // *) 交互前重新设置traceId, 避免信息丢失
         RpcContext.getContext().setAttachment("traceId", TraceIdUtils.getTraceId());
         MDC.put("traceId", TraceIdUtils.getTraceId());
      }
      // *) 实际的rpc调用
      return invoker.invoke(invocation);
   }
}

为什么已经继承了ListenableFilter 了,Dubbo还得依靠SPI机制加载它,dubbo不能直接通过查找ListenableFilter 的继承类来加载吗?

现在稍微知道SPI机制怎么用了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1511603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 14.04:PaddleOCR基于PaddleServing的在线服务化部署(失败)

一、 二、安装 注&#xff1a; 安装 PaddleOCR 2.3 。 因为 PaddleOCR 2.4 的 推荐环境 PaddlePaddle > 2.1.2。 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.4/doc/doc_ch/environment.md 安装前的环境准备 在使用Paddle Serving之前&#xff0c;需要完…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的常见车型识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文深入探讨了如何应用深度学习技术开发一个先进的常见车型识别系统。该系统核心采用最新的YOLOv8算法&#xff0c;并与早期的YOLOv7、YOLOv6、YOLOv5等版本进行性能比较&#xff0c;主要评估指标包括mAP和F1 Score等。详细解析了YOLOv8的工作机制&#xff0c…

【力扣白嫖日记】1321.餐馆营业额变化增长

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1321.餐馆营业额变化增长 表&#xff1a;Customer 列名类型cutomer_idintnamevarcharvisited_ondateamounti…

阻塞队列学习

1、什么是阻塞队列&#xff1f; 顾名思义&#xff0c;就是支持阻塞的队列&#xff0c;相比于其他的队列&#xff0c;阻塞队列支持以下特性&#xff1a; 队列为空的时候&#xff0c;获取元素的线程会等待队列变为非空。队列为满的时候&#xff0c;存储元素的线程会等待队列可以…

初学者必会的Python3文件操作

文件操作的步骤&#xff1a; 打开文件 -> 操作文件 -> 关闭文件 切记&#xff1a;最后要关闭文件。 打开文件 文件句柄 open(文件路径, 模式) 指定文件编码 文件句柄 open(文件路径,模式,encodingutf-8) 为了防止忘记关闭文件&#xff0c;可以使用上下文管理器来…

计算机steam_api.dll丢失的解决方法,轻松搞定steam游戏问题

在计算机运行相关游戏软件时&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到steamapi.dll&#xff0c;无法继续执行代码”&#xff0c;如果找不到steam_api.dll文件&#xff0c;将无法正常启动并运行基于Steam平台的游戏。。那么&#xff0c;如何…

镜面不锈钢氮气柜主要功能和应用领域介绍

镜面不锈钢氮气柜是一种专为特殊物品储存设计的高级储存设备&#xff0c;它结合了不锈钢材质的优良耐腐蚀性、易清洁性和氮气储存技术&#xff0c;确保内部储存的物品处于高度洁净、干燥且稳定的低氧环境中。以下是其主要功能介绍&#xff1a; 防潮保护&#xff1a;氮气柜通过填…

字节跳动也启动春季校园招聘了(含二面算法原题)

字节跳动 - 春招启动 随着各个大厂陆续打响春招的响头炮&#xff0c;字节跳动也官宣了春季校园招聘的正式开始。 还是那句话&#xff1a;连互联网大厂启动校招计划尚且争先恐后&#xff0c;你还有什么理由不马上行动&#xff1f;&#xff01; 先来扫一眼「春招流程」和「面向群…

双环PID控制详细讲解

参考博客&#xff1a; &#xff08;1&#xff09;PID双环控制&#xff08;速度环和位置环&#xff09; &#xff08;2&#xff09;PID控制&#xff08;四&#xff09;&#xff08;单环与双环PID&#xff09; &#xff08;3&#xff09;内外双环pid算法 0 单环PID 目标位置→系…

【spring】-多模块构建二-问题整理

1、bean注入问题 The injection point has the following annotations: - org.springframework.beans.factory.annotation.Autowired(requiredtrue) 解决1&#xff1a; 由于引入的bean类 不属于启动类的子模块下&#xff0c;需要在启动类手动声明扫描的类 也适用于公共子模…

探索HDFS读写流程、节点机制和数据完整性

目录 写在前面一、HDFS的读写流程1.1 HDFS写数据流程1.2 机架感知1.3 HDFS读数据流程1.4 小结 二、 NameNode和SecondaryNameNode2.1 NN和2NN工作机制2.2 Fsimage和Edits解析2.2.1 oiv查看Fsimage文件2.2.2 oev查看Edits文件 2.3 CheckPoint时间设置 三、DataNode3.1 DataNode工…

每日一题——LeetCode2129.将标题首字母大写

方法一 个人方法 将字符串转为数组&#xff0c;遍历数组&#xff0c;对数组的每一个元素&#xff0c;先全部转为小写&#xff0c;如果当前元素长度大于2&#xff0c;将第一个字符转为大写形式 var capitalizeTitle function(title) {titletitle.split( )for(let i0;i<tit…

[嵌入式系统-37]:龙芯1B 开发学习套件 -6-协处理器CP0之CPU异常处理与外部中断控制器的中断处理

目录 一、MPIS CPU Core与32个异常exception 1.1 龙芯1B的MIPS CPU IP Core 1.2 MIP32指令系统 1.3 MIPS CPU寄存器 1.4 龙芯异常exception与中断interrupt的区别 1.5 向量中断与非向量中断 1.6 MIPS CPU的异常向量与异常向量号&#xff1a;向量中断的支持 二、协议处理…

PAT-素数专题、质因子分解、大整数计算

素数专题 1007.素数对的猜想 让我们定义dn​为&#xff1a;​ &#xff0c;其中pi​是第i个素数。显然有d1​1&#xff0c;且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<105)&#xff0c;请计算不超过N的满足猜想…

新火种AI|在撕裂中求前进:OpenAI最近的日子,属实不太好过。

作者&#xff1a;小岩 编辑&#xff1a;彩云 伴随着ChatGPT 火遍全球&#xff0c;OpenAI俨然成为了备受全世界关注的主角。因为有横空出世的GPT-4&#xff0c;重磅炸弹视频生成模型Sora等产品&#xff0c;OpenAI始终都是以行业霸主的姿态出现在人们的视野中。也正是因为OpenA…

vue使用elementPlus ui框架,如何给Dialog 对话框添加Loading 自定义类名显示隐藏

vue使用elementPlus ui框架时&#xff0c;如何给Dialog 对话框添加Loading 自定义类名&#xff0c;想要实现dialog对话框区域有loading效果 官方给出的这个API配置项customClass&#xff0c;使用不太明确。暂时无法实现绑定class。 最后的实现方式&#xff1a; <template&…

数据分析-Pandas如何观测数据的中心趋势度

数据分析-Pandas如何观测数据的中心趋势度 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据…

Redis中的缓存设计

缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c;缓存层和存储层都不会命中&#xff0c;通常处于容错的考虑&#xff0c;如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c;失去了缓存保护后端存储的意义。…

基于PyTorch深度学习实战入门系列-Numpy基础全

Numpy的使用 导入Numpy模块 import numpy as np创建数组&#xff08;一维数组、小数数组、二维数组&#xff09; # 创建一个一维数组 n1 np.array([1, 2, 3]) # 创建一个含有小数的一维数组 n2 np.array([0.1, 0.2, 0.3]) # 创建一个简单的二维数组 n3 np.array([[1, 2], [3…

Apache SkyWalking 监控 Linux 实战

SkyWalking 从 8.4 版本开始支持监控主机&#xff0c;用户可以轻松从 dashboard 上检测可能的问题&#xff0c;例如当 CPU 使用过载、内存或磁盘空间不足或者当网络状态不健康时等。 与监控 MySQL Server 类似&#xff0c;SkyWalking 也是利用 Prometheus 和 OpenTelemetry 收集…