当前位置: 首页 > 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.lqws.cn/news/143695.html

相关文章:

  • 41道Django高频题整理(附答案背诵版)
  • PostgreSQL 的扩展pg_prewarm
  • 20250605在微星X99主板中配置WIN10和ubuntu22.04.6双系统启动的引导设置
  • Django CMS 的 Demo
  • NoSQL之Redis配置与优化
  • SQL Server相关的sql语句
  • 嵌入式学习 D33:系统编程--网路编程
  • ubuntu 端口复用
  • Ubuntu20.04设置为开机后直接自动进入纯命令行界面
  • 【Linux】为 Git 设置 Commit 提交模板方法,可统一个人或者项目的提交风格
  • 【Git系列】如何同步原始仓库的更新到你的fork仓库?
  • Excel-vlookup -多条件匹配,返回指定列处的值
  • [测试_10] Selenium IDE | cssSelector | XPath | 操作测试
  • Haproxy的基础配置
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)
  • 111页可编辑精品PPT | 华为业务变革框架及战略级项目管理华为变革管理华为企业变革华为的管理模式案例培训
  • EXCEL通过DAX Studio获取端口号连接PowerBI
  • 联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率
  • 三甲医院“AI平台+专家系统”双轮驱动模式的最新编程方向分析
  • 【个人笔记】数据库原理(西电)
  • vscode里如何用git
  • gorm多租户插件的使用
  • Linux下使用Transformers,模型和数据集的位置
  • 把握时代脉搏,铸就行业标杆:珠江电缆未来发展战略展望
  • 【C++ Qt】窗口(Qt窗口框架、菜单栏QMenuBar)
  • OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
  • Day13
  • PPT转图片拼贴工具 v1.0
  • SQL知识合集(一):函数篇
  • 神经网络-Day45