Prechádzať zdrojové kódy

coding:投流代码提交

zhangqin 6 dní pred
rodič
commit
00e4ba8926

+ 4 - 0
fs-ad-new-api/src/main/java/com/fs/app/mq/consumer/ConversionTrackingMessageConsumer.java

@@ -3,6 +3,7 @@ package com.fs.app.mq.consumer;
 import com.fs.app.facade.IConversionService;
 import com.fs.common.annotation.DistributeLock;
 import com.fs.common.utils.RedisUtil;
+import com.fs.common.utils.TraceIdUtil;
 import com.fs.newAdv.constant.ConversionTrackingMessage;
 import com.fs.newAdv.constant.MqTopicConstant;
 import com.fs.newAdv.enums.SystemEventTypeEnum;
@@ -11,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.annotation.ConsumeMode;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.jboss.logging.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -48,6 +50,8 @@ public class ConversionTrackingMessageConsumer implements RocketMQListener<Conve
     @Override
     @DistributeLock(scene = "mq", keyExpression = "#message.traceId", waitTime = 0, errorMsg = "重复消费")
     public void onMessage(ConversionTrackingMessage message) {
+        TraceIdUtil.put(message.getTrackId());
+
         String traceId = message.getTraceId();
         SystemEventTypeEnum eventType = message.getEventType();
 

+ 29 - 0
fs-ad-new-api/src/main/java/com/fs/framework/aspectj/ScheduledTraceIdAspect.java

@@ -0,0 +1,29 @@
+package com.fs.framework.aspectj;
+
+import com.fs.common.utils.TraceIdUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+@Slf4j
+public class ScheduledTraceIdAspect {
+
+    @Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
+    public void scheduledPointcut() {
+    }
+
+    @Around("scheduledPointcut()")
+    public Object around(ProceedingJoinPoint pjp) throws Throwable {
+        try {
+            TraceIdUtil.init();
+            return pjp.proceed();
+        } finally {
+            TraceIdUtil.clear();
+        }
+    }
+}

+ 4 - 0
fs-ad-new-api/src/main/java/com/fs/framework/config/AsyncConfig.java

@@ -48,6 +48,10 @@ public class AsyncConfig implements AsyncConfigurer {
         // 等待时间
         executor.setAwaitTerminationSeconds(60);
 
+
+        // ⭐ 关键:传递 MDC
+        executor.setTaskDecorator(new MdcTaskDecorator());
+
         executor.initialize();
 
         log.info("异步线程池初始化完成");

+ 30 - 0
fs-ad-new-api/src/main/java/com/fs/framework/config/MdcTaskDecorator.java

@@ -0,0 +1,30 @@
+package com.fs.framework.config;
+
+import org.slf4j.MDC;
+import org.springframework.core.task.TaskDecorator;
+
+import java.util.Map;
+
+public class MdcTaskDecorator implements TaskDecorator {
+
+    @Override
+    public Runnable decorate(Runnable runnable) {
+
+        // 1. 获取提交任务时的 MDC 内容
+        Map<String, String> contextMap = MDC.getCopyOfContextMap();
+
+        return () -> {
+            try {
+                // 2. 任务执行前恢复 MDC
+                if (contextMap != null) {
+                    MDC.setContextMap(contextMap);
+                }
+
+                runnable.run();
+            } finally {
+                // 3. 清理,避免线程复用污染
+                MDC.clear();
+            }
+        };
+    }
+}

+ 36 - 0
fs-ad-new-api/src/main/java/com/fs/framework/config/TrackIdFilter.java

@@ -0,0 +1,36 @@
+package com.fs.framework.config;
+
+import cn.hutool.core.lang.UUID;
+import org.jboss.logging.MDC;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+public class TrackIdFilter implements Filter {
+
+    public static final String TRACK_ID = "X-Track-Id";
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
+
+        // 1. 生成唯一 trackId
+        String trackId = UUID.randomUUID().toString().replace("-", "");
+
+        // 2. 放入 MDC
+        MDC.put(TRACK_ID, trackId);
+
+        // 3. 响应头返回 traceId
+        HttpServletResponse httpResponse = (HttpServletResponse) response;
+        httpResponse.setHeader(TRACK_ID, trackId);
+
+        try {
+            chain.doFilter(request, response);
+        } finally {
+            MDC.remove(TRACK_ID);
+        }
+    }
+}

+ 1 - 1
fs-ad-new-api/src/main/resources/logback.xml

@@ -3,7 +3,7 @@
     <!-- 日志存放路径 -->
 	<property name="log.path" value="/home/fs-ad-new-api/logs" />
     <!-- 日志输出格式 -->
-	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] [%X{X-Track-Id}] %-5level %logger{20} - [%method,%line] - %msg%n" />
 
 	<!-- 控制台输出 -->
 	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">

+ 26 - 0
fs-common/src/main/java/com/fs/common/utils/TraceIdUtil.java

@@ -0,0 +1,26 @@
+package com.fs.common.utils;
+
+import cn.hutool.core.lang.UUID;
+import org.slf4j.MDC;
+
+public class TraceIdUtil {
+
+    private static final String TRACK_ID_KEY = "X-Track-Id";
+
+    public static void init() {
+        String trackId = UUID.randomUUID().toString().replace("-", "");
+        MDC.put(TRACK_ID_KEY, trackId);
+    }
+
+    public static void clear() {
+        MDC.remove(TRACK_ID_KEY);
+    }
+
+    public static String get() {
+        return MDC.get(TRACK_ID_KEY);
+    }
+
+    public static void put(String key) {
+        MDC.put(TRACK_ID_KEY, key);
+    }
+}

+ 1 - 0
fs-service/src/main/java/com/fs/newAdv/constant/ConversionTrackingMessage.java

@@ -28,6 +28,7 @@ public class ConversionTrackingMessage implements Serializable {
      * value
      */
     private Double value;
+    private String trackId;
 }
 
 

+ 8 - 30
fs-service/src/main/java/com/fs/newAdv/domain/Site.java

@@ -36,16 +36,6 @@ public class Site implements Serializable {
      */
     private Integer launchType;
 
-    /**
-     * 运营部门
-     */
-    private String operationDept;
-
-    /**
-     * 负责人
-     */
-    private String manager;
-
     /**
      * 广告类型
      */
@@ -81,26 +71,6 @@ public class Site implements Serializable {
      */
     private String launchPageId;
 
-    /**
-     * 分配方式
-     */
-    private Integer distributeType;
-
-    /**
-     * 分配规则
-     */
-    private String distributeRule;
-
-    /**
-     * 来源名称
-     */
-    private String sourceName;
-
-    /**
-     * 来源ID
-     */
-    private Long sourceId;
-
     /**
      * 项目名称
      */
@@ -141,6 +111,14 @@ public class Site implements Serializable {
      * 站点状态 1启用 0停用
      */
     private Integer status;
+    /**
+     * 企微分配规则 1个人码分配 2活码分配
+     */
+    private Integer allocationRule;
+    /**
+     * 分配id
+     */
+    private Long allocationRuleId;
 
     /**
      * 创建时间

+ 5 - 12
fs-service/src/main/java/com/fs/newAdv/event/ConversionEventListener.java

@@ -1,9 +1,9 @@
 package com.fs.newAdv.event;
 
 
+import com.fs.common.utils.TraceIdUtil;
 import com.fs.newAdv.constant.ConversionTrackingMessage;
 import com.fs.newAdv.constant.MqTopicConstant;
-
 import com.fs.newAdv.enums.SystemEventTypeEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.client.producer.SendCallback;
@@ -43,33 +43,26 @@ public class ConversionEventListener {
         Double value = event.getValue();
         log.info("接收到转化事件 | traceId={}, eventType={} ,value={}",
                 traceId, eventType, value);
+        String trackId = TraceIdUtil.get();
         // 1. 校验参数
         // 2. 构建MQ消息
         ConversionTrackingMessage message = new ConversionTrackingMessage();
         message.setTraceId(traceId);
         message.setEventType(eventType);
         message.setValue(value);
+        message.setTrackId(trackId);
         // 3. 异步发送消息
         rocketMQTemplate.asyncSend(
-                MqTopicConstant.CONVERSION_TOPIC,
+                MqTopicConstant.CONVERSION_TRACKING_TOPIC,
                 message,
                 new SendCallback() {
                     @Override
                     public void onSuccess(SendResult sendResult) {
-                        log.info("转化消息发送成功 | traceId={}, eventType={}, msgId={}, queueId={}",
-                                message.getTraceId(),
-                                message.getEventType().getDescription(),
-                                sendResult.getMsgId(),
-                                sendResult.getMessageQueue().getQueueId());
                     }
 
                     @Override
                     public void onException(Throwable e) {
-                        log.error("转化消息发送失败 | clickId={}, eventType={}, error={}",
-                                message.getTraceId(),
-                                message.getEventType().getDescription(),
-                                e.getMessage(),
-                                e);
+                        log.error("转化消息发送失败:{}", trackId);
                         // TODO: 记录到数据库,后续补偿
                     }
                 }