【dubbo3.x trace组件分享】

本文介绍了dubbo-trace组件,它基于dubbo3.x实现traceId和spanId的链路追踪,简化了服务排查。文章详细阐述了组件的设计原理、实现方案以及使用步骤,包括consumer和provider端的实现,还提到了ThreadLocal的局限性和解决方案。
摘要由CSDN通过智能技术生成


背景

在微服务系统里服务非常的分散,服务日志也分散在各处,多个服务没有统一并且唯一的检索条件,导致问题排查难度很大,因此trace链路追踪技术就应运而生。


一、trace-dubbo组件介绍

github:https://github.com/zbrave429/dubbo-trace
dubbo-trace基于dubbo3.x实现了traceId,spanId链路传递,使用非常简单,代码0侵入,maven直接引入即可

二、设计原理

2.1 原理图

官方文档:https://dubbo.apache.org/zh/docs/v3.0/references/features/attachment/

隐式传参原理图
从图中可以看到,左边为consumer,右边为provider
在consumer端filter里面setAttachment 放入trace参数,在provider端filter里面getAttachment获取trace参数,执行后续处理。
原理已经很清楚了,接下来就是干

2.2 实现方案

  • 请求入口将trace信息缓存到ThreadLocal内和Log参数
  • consumer在发起dubbo调用时从ThreadLocal内获取trace信息设置到Attachment参数内
  • provider接收到请求后从Attachment获取到trace信息缓存到ThreadLocal和Log内

2.2.1 consumer端实现

// CommonConstants.CONSUMER 客户端过滤器
@Activate(group = {
   CommonConstants.CONSUMER})
public class TraceConsumerFilter implements Filter {
   
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
   
		// 1.从ThreadLocal内获取trace信息
        Tracer tracer = TraceContext.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值