目标
http接口
所有HTTP API响应体中增加traceId字段:
{
"code": 200,
"data": "Hello world",
"msg": "ok",
"traceId": "bd41aed8b2da4895a9d2b43d1ef12595"
}
dubbo接口
对于服务调用方:每次调用服务时,都需要向服务提供方传递traceId
。
对于服务提供方:每次服务响应时,都需要从服务调用方获取traceId
,并将该traceId
传递下去,直至该响应结束。
可对traceId
的命名进行规范。
如:
req:xxa:xxx
表示 前端请求,xxa模块,序号标识xxxtim:xxc:xxx
表示 定时器触发,xxc模块,序号标识xxx
实现思路
http
项目内部使用org.slf4j.MDC传递traceId。
使用拦截器完成traceId的设置与清除。请求到来时,生成并设置traceId;请求结束时,清除traceId。
拦截器中无法修改HTTP响应体。可通过ControllerAdvice统一向Response Body中写入traceId。
Dubbo
使用Dubbo提供的org.apache.dubbo.rpc.Filter来完成traceId的设置与获取。