全链路跟踪之Dubbo

首先简单认识下@Activate及RpcContext
@Activate:主要使用在有多个扩展点实现、需要同时根据不同条件被激活的场景中,如Filter需要多个同时激活,因为每个Filter实现的是不同的功能。
RpcContext:上下文信息

1、Activate注解详细说明

参数名描述
String[] group()URL中的分组如果匹配,则激活
String[] value()URL中如果包含该key值,则激活
String[] before()填写扩展点列表,表示哪些扩展点要在本扩展点之前激活
String[] after()表示哪些扩展点需要在本扩展点之后激活
int order()排序信息

2、RpcContext上下文
本质上是一个ThreadLocal,当接收到RPC请求或发起RPC请求时,RpcContext的状态会变化。比如A调用B,B再调用C,则B机器上,在B调用C之前,RpcContext记录的是A调用B的信息,在B调用C之后,RpcContext记录的是B调用C.

3、全链路TraceId跟踪(透传参数)

服务消费方
第一步:新建扩展类

@Activate
public class RpcTraceFilter implements Filter {
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        String traceId = RpcContext.getContext().getAttachment("traceId");
        if(StringUtils.isEmpty(traceId)){
            traceId = UUID.randomUUID().toString();
            RpcContext.getContext().setAttachment("traceId",traceId);
        }
        return invoker.invoke(invocation);
    }
}

第二步:工程下resources新建 META-INF/dubbo目录
第三步:在dubbo目录下新建com.alibaba.dubbo.rpc.Filter文件(文件名必须固定),文件内容

自定义KEY=扩展类的全路径名
如:
traceFilter=com.ab.cd.RpcTraceFilter

服务提供方
第一步:新建扩展类

@Activate
public class RpcTraceFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        String traceId = RpcContext.getContext().getAttachment(Constants.TRACE_ID);
        if (StringUtils.isNoneBlank(traceId)) {
            MDC.put(Constants.TRACE_ID, traceId);
        }
        return invoker.invoke(invocation);
    }
}

第二步:工程下resources新建 META-INF/dubbo目录
第三步:在dubbo目录下新建com.alibaba.dubbo.rpc.Filter文件(文件名必须固定),文件内容

自定义KEY=扩展类的全路径名
如:
traceFilter=com.ab.ef.RpcTraceFilter
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值