当前位置: 首页 > news >正文

Dubbo Logback 远程调用携带traceid

背景

A项目有调用B项目的服务,A项目使用 logback 且有 MDC 方式做 traceid,调用B项目的时候,traceid 没传递过期,导致有时候不好排查问题和链路追踪

准备工作

因为使用的是 alibaba 的 dubbo 所以需要加入单独的包

<dependency><groupId>com.alibaba</groupId><artifactId>transmittable-thread-local</artifactId><version>2.14.5</version>
</dependency>

Dubbo拦截器代码

import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.*;
import com.dflm.weixin.util.LogUtils;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;@Slf4j
@Activate(group = {"consumer", "provider"})
public class DubboLogTraceFilter implements Filter {@Overridepublic Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {String logUUid = null;if (RpcContext.getContext().isConsumerSide()) {// 消费者 作为消费者,上下文中有 trace idlogUUid = MDC.get(LogUtils.LOG_TRACE_ID);RpcContext.getContext().setAttachment(LogUtils.LOG_TRACE_ID, logUUid);log.info("DubboLogTraceFilter 消费者 设置 trace id {}", logUUid);} else {// 生产者 取出 trace idlogUUid = RpcContext.getContext().getAttachment(LogUtils.LOG_TRACE_ID);log.info("DubboLogTraceFilter 生产者 取出 trace id {}", logUUid);MDC.put(LogUtils.LOG_TRACE_ID, logUUid);}try {return invoker.invoke(invocation);} finally {if (RpcContext.getContext().isProviderSide()) {MDC.remove(LogUtils.LOG_TRACE_ID);log.info("DubboLogTraceFilter 移除 trace id {}", logUUid);}}}
}

配置文件

resources 目录下面的META-INF文件夹中新建dubbo文件夹,新建文件com.alibaba.dubbo.rpc.Filter
注意的是代码中继承的Filter是哪个包就写哪个包,不然写成apach的是不会生效的,文件内容就是配置的Filter的类路径和名称

com.wemew.filter.DubboLogTraceFilter

效果

A 服务
在这里插入图片描述
B 服务
在这里插入图片描述

http://www.xdnf.cn/news/888301.html

相关文章:

  • 【Algorithm】Segment Tree 简单介绍
  • C#异步编程:从线程到Task的进化之路
  • Linux 内核队列调度相关内核选项详解
  • Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
  • 【.net core】.KMZ文件解压为.KML文件并解析为GEOJSON坐标数据集。附KML处理多线(LineString)闭环问题
  • 【LLIE专题】NTIRE 2025 低照度图像增强第二名方案
  • EtherCAT Module and Slot
  • Python训练第四十五天
  • 中国森林地上和地下植被碳储量数据集(2002~2021)
  • 【EN 18031】访问控制机制(ACM - 3):儿童玩具的防护盾
  • 我认为STM32输入只分为模拟输入 与 数字输入
  • 实现基于Yolo的异常聚集算法
  • 会话技术:Cookie 与 Session 详解
  • Ubuntu崩溃修复方案
  • 基于Java(Jsp+servelet+Javabean)+MySQL实现图书管理系统
  • Vue中实现表格吸底滚动条效果,列太多时左右滚动条始终显示在页面中
  • android知识总结
  • 【从0-1的CSS】第1篇:CSS简介,选择器已经常用样式
  • NoSQl之Redis部署
  • 【PhysUnits】15.16 补充to_i32方法的类型级整数表示(basic.rs)
  • wxpython快捷键示例
  • Python cryptography【密码库】库功能与使用指南
  • 模块化架构下的前端调试体系建设:WebDebugX 与多工具协同的工程实践
  • Sublime Text4 4192 安装
  • NGINX `ngx_stream_core_module` 模块概览
  • 数据分析后台设计指南:实战案例解析与5大设计要点总结
  • 实用对比图软件推荐:快速呈现信息差异
  • 【请关注】MySQL 碎片整理提升性能
  • 在Facebook平台有效结合TikTok跨境营销的方法
  • Calendar类日期设置进位问题