dubbo traceID 实验7
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
DubboTraceIdFilter=com.czg.config.DubboTraceIdFilter
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
traceIdFilter=com.czg.config.TraceIdFilter
|
||||||
@@ -45,5 +45,8 @@ pagehelper:
|
|||||||
support-methods-arguments: true
|
support-methods-arguments: true
|
||||||
|
|
||||||
dubbo:
|
dubbo:
|
||||||
|
provider:
|
||||||
|
filter: traceIdFilter
|
||||||
consumer:
|
consumer:
|
||||||
|
filter: traceIdFilter
|
||||||
check: false
|
check: false
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
traceIdFilter=com.czg.config.DubboTraceIdFilter
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
traceIdFilter=com.czg.TraceIdFilter
|
||||||
@@ -1 +0,0 @@
|
|||||||
traceIdFilter=com.czg.config.DubboTraceIdFilter
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
traceIdFilter=com.czg.config.TraceIdFilter
|
||||||
@@ -1 +0,0 @@
|
|||||||
traceIdFilter=com.czg.config.DubboTraceIdFilter
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
traceIdFilter=com.czg.config.TraceIdFilter
|
||||||
@@ -1 +0,0 @@
|
|||||||
traceIdFilter=com.czg.config.DubboTraceIdFilter
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
traceIdFilter=com.czg.config.TraceIdFilter
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -45,7 +45,7 @@ import java.util.List;
|
|||||||
* @since 2025-02-08
|
* @since 2025-02-08
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@DubboService(filter = "DubboTraceIdFilter")
|
@DubboService
|
||||||
public class AShopUserServiceImpl implements AShopUserService {
|
public class AShopUserServiceImpl implements AShopUserService {
|
||||||
@Resource
|
@Resource
|
||||||
private ShopUserService shopUserService;
|
private ShopUserService shopUserService;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import java.util.List;
|
|||||||
* @author Administrator
|
* @author Administrator
|
||||||
* @since 2025-02-08
|
* @since 2025-02-08
|
||||||
*/
|
*/
|
||||||
@DubboService(filter = "DubboTraceIdFilter")
|
@DubboService
|
||||||
public class ShopUserServiceImpl extends ServiceImpl<ShopUserMapper, ShopUser> implements ShopUserService {
|
public class ShopUserServiceImpl extends ServiceImpl<ShopUserMapper, ShopUser> implements ShopUserService {
|
||||||
@Resource
|
@Resource
|
||||||
private ShopUserFlowService shopUserFlowService;
|
private ShopUserFlowService shopUserFlowService;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ import java.util.List;
|
|||||||
* @author Administrator
|
* @author Administrator
|
||||||
* @since 2025-02-08
|
* @since 2025-02-08
|
||||||
*/
|
*/
|
||||||
@DubboService(filter = "DubboTraceIdFilter")
|
@DubboService
|
||||||
public class UShopUserServiceImpl implements UShopUserService {
|
public class UShopUserServiceImpl implements UShopUserService {
|
||||||
@Resource
|
@Resource
|
||||||
private ShopUserService shopUserService;
|
private ShopUserService shopUserService;
|
||||||
|
|||||||
Reference in New Issue
Block a user