diff --git a/cash-api/account-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter b/cash-api/account-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter deleted file mode 100644 index bec030917..000000000 --- a/cash-api/account-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter +++ /dev/null @@ -1 +0,0 @@ -DubboTraceIdFilter=com.czg.config.DubboTraceIdFilter \ No newline at end of file diff --git a/cash-api/account-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/cash-api/account-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 000000000..5fc679bcd --- /dev/null +++ b/cash-api/account-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1 @@ +traceIdFilter=com.czg.config.TraceIdFilter \ No newline at end of file diff --git a/cash-api/account-server/src/main/resources/application.yml b/cash-api/account-server/src/main/resources/application.yml index 241606f9f..dd25375fc 100644 --- a/cash-api/account-server/src/main/resources/application.yml +++ b/cash-api/account-server/src/main/resources/application.yml @@ -45,5 +45,8 @@ pagehelper: support-methods-arguments: true dubbo: + provider: + filter: traceIdFilter consumer: + filter: traceIdFilter check: false diff --git a/cash-api/market-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter b/cash-api/market-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter deleted file mode 100644 index ea14da52f..000000000 --- a/cash-api/market-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter +++ /dev/null @@ -1 +0,0 @@ -traceIdFilter=com.czg.config.DubboTraceIdFilter \ No newline at end of file diff --git a/cash-api/market-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/cash-api/market-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 000000000..3bbd959ca --- /dev/null +++ b/cash-api/market-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1 @@ +traceIdFilter=com.czg.TraceIdFilter \ No newline at end of file diff --git a/cash-api/order-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter b/cash-api/order-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter deleted file mode 100644 index ea14da52f..000000000 --- a/cash-api/order-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter +++ /dev/null @@ -1 +0,0 @@ -traceIdFilter=com.czg.config.DubboTraceIdFilter \ No newline at end of file diff --git a/cash-api/order-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/cash-api/order-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 000000000..5fc679bcd --- /dev/null +++ b/cash-api/order-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1 @@ +traceIdFilter=com.czg.config.TraceIdFilter \ No newline at end of file diff --git a/cash-api/product-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter b/cash-api/product-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter deleted file mode 100644 index ea14da52f..000000000 --- a/cash-api/product-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter +++ /dev/null @@ -1 +0,0 @@ -traceIdFilter=com.czg.config.DubboTraceIdFilter \ No newline at end of file diff --git a/cash-api/product-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/cash-api/product-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 000000000..5fc679bcd --- /dev/null +++ b/cash-api/product-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1 @@ +traceIdFilter=com.czg.config.TraceIdFilter \ No newline at end of file diff --git a/cash-api/system-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter b/cash-api/system-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter deleted file mode 100644 index ea14da52f..000000000 --- a/cash-api/system-server/src/main/resources/META-INF/dubbo/com.czg.config.DubboTraceIdFilter +++ /dev/null @@ -1 +0,0 @@ -traceIdFilter=com.czg.config.DubboTraceIdFilter \ No newline at end of file diff --git a/cash-api/system-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/cash-api/system-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 000000000..5fc679bcd --- /dev/null +++ b/cash-api/system-server/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1 @@ +traceIdFilter=com.czg.config.TraceIdFilter \ No newline at end of file diff --git a/cash-common/cash-common-api-config/src/main/java/com/czg/config/TraceIdFilter.java b/cash-common/cash-common-api-config/src/main/java/com/czg/config/TraceIdFilter.java new file mode 100644 index 000000000..b349cfbe8 --- /dev/null +++ b/cash-common/cash-common-api-config/src/main/java/com/czg/config/TraceIdFilter.java @@ -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); + } + } +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AShopUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AShopUserServiceImpl.java index 099705414..a01325772 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AShopUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AShopUserServiceImpl.java @@ -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; diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java index 2b6cd7b83..14ee0c00d 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java @@ -41,7 +41,7 @@ import java.util.List; * @author Administrator * @since 2025-02-08 */ -@DubboService(filter = "DubboTraceIdFilter") +@DubboService public class ShopUserServiceImpl extends ServiceImpl implements ShopUserService { @Resource private ShopUserFlowService shopUserFlowService; diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UShopUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UShopUserServiceImpl.java index 9cd2c4cde..43d7a08f4 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UShopUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/UShopUserServiceImpl.java @@ -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;