dubbo traceID 实验7

This commit is contained in:
2025-11-06 17:07:06 +08:00
parent ddcdc4ccbc
commit d64b4d0fa1
15 changed files with 69 additions and 8 deletions

View File

@@ -1 +0,0 @@
DubboTraceIdFilter=com.czg.config.DubboTraceIdFilter

View File

@@ -0,0 +1 @@
traceIdFilter=com.czg.config.TraceIdFilter

View File

@@ -45,5 +45,8 @@ pagehelper:
support-methods-arguments: true
dubbo:
provider:
filter: traceIdFilter
consumer:
filter: traceIdFilter
check: false

View File

@@ -1 +0,0 @@
traceIdFilter=com.czg.config.DubboTraceIdFilter

View File

@@ -0,0 +1 @@
traceIdFilter=com.czg.TraceIdFilter

View File

@@ -1 +0,0 @@
traceIdFilter=com.czg.config.DubboTraceIdFilter

View File

@@ -0,0 +1 @@
traceIdFilter=com.czg.config.TraceIdFilter

View File

@@ -1 +0,0 @@
traceIdFilter=com.czg.config.DubboTraceIdFilter

View File

@@ -0,0 +1 @@
traceIdFilter=com.czg.config.TraceIdFilter

View File

@@ -1 +0,0 @@
traceIdFilter=com.czg.config.DubboTraceIdFilter

View File

@@ -0,0 +1 @@
traceIdFilter=com.czg.config.TraceIdFilter

View File

@@ -0,0 +1,58 @@
package com.czg.config;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.slf4j.MDC;
import java.util.UUID;
/**
* @author ww
* @description
*/
@Activate(group = {CommonConstants.PROVIDER, CommonConstants.CONSUMER})
public class TraceIdFilter implements Filter {
// 定义 traceId 在 Dubbo 调用上下文的键
private static final String TRACE_ID_KEY = "traceId";
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
// 1. 获取当前调用的上下文(消费端/服务端)
RpcContext context = RpcContext.getContext();
try {
// 2. 处理逻辑:
// 若为消费端(发送请求前):生成或复用 traceId设置到请求上下文
if (context.isConsumerSide()) {
String traceId = MDC.get(TRACE_ID_KEY);
// 若 MDC 中无 traceId则生成一个如 UUID
if (traceId == null || traceId.isEmpty()) {
traceId = UUID.randomUUID().toString().replace("-", "");
}
// 将 traceId 设置到 Dubbo 调用的附件(跨服务传递)
context.setAttachment(TRACE_ID_KEY, traceId);
// 设置到 MDC供当前服务日志使用
MDC.put(TRACE_ID_KEY, traceId);
}
// 若为服务端(接收请求后):从请求附件中获取 traceId设置到 MDC
if (context.isProviderSide()) {
String traceId = context.getAttachment(TRACE_ID_KEY);
// 若消费端未传递,则生成一个(避免空值)
if (traceId == null || traceId.isEmpty()) {
traceId = UUID.randomUUID().toString().replace("-", "");
}
// 设置到 MDC供当前服务日志使用
MDC.put(TRACE_ID_KEY, traceId);
}
// 3. 执行实际调用(继续链路)
return invoker.invoke(invocation);
} finally {
// 4. 清理 MDC避免线程池复用导致的上下文污染
MDC.remove(TRACE_ID_KEY);
}
}
}

View File

@@ -45,7 +45,7 @@ import java.util.List;
* @since 2025-02-08
*/
@Slf4j
@DubboService(filter = "DubboTraceIdFilter")
@DubboService
public class AShopUserServiceImpl implements AShopUserService {
@Resource
private ShopUserService shopUserService;

View File

@@ -41,7 +41,7 @@ import java.util.List;
* @author Administrator
* @since 2025-02-08
*/
@DubboService(filter = "DubboTraceIdFilter")
@DubboService
public class ShopUserServiceImpl extends ServiceImpl<ShopUserMapper, ShopUser> implements ShopUserService {
@Resource
private ShopUserFlowService shopUserFlowService;

View File

@@ -43,7 +43,7 @@ import java.util.List;
* @author Administrator
* @since 2025-02-08
*/
@DubboService(filter = "DubboTraceIdFilter")
@DubboService
public class UShopUserServiceImpl implements UShopUserService {
@Resource
private ShopUserService shopUserService;