diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/config/LinkConfig.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/config/LinkConfig.java index cb9b7d2db4c7df10bda3fd76efd9402e974816a1..d219f9ffee7ca864e779fff70351e113db816764 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/config/LinkConfig.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/config/LinkConfig.java @@ -1,5 +1,6 @@ package com.oszero.deliver.server.config; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.pretreatment.constant.PretreatmentCodeConstant; import com.oszero.deliver.server.pretreatment.link.LinkHandler; import com.oszero.deliver.server.pretreatment.link.LinkTemplate; @@ -72,6 +73,11 @@ public class LinkConfig { private final DingSend dingSendAction; private final FeiShuSend feiShuSend; + /** + * 消息链路追踪 logger + */ + private final MessageLinkTraceLogger messageLinkTraceLogger; + /** * @return 前置处理责任链处理器 */ @@ -88,7 +94,8 @@ public class LinkConfig { // 平台 ID userIdUsersType(map); - return new LinkHandler().setTemplateConfig(map); + return new LinkHandler().setTemplateConfig(map) + .setMessageLinkTraceLogger(messageLinkTraceLogger); } /** diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/BaseHandler.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/BaseHandler.java index 87d21795f1205eba2b601b43a2d447a193d7f8b3..ad74deccfeeaf98e700466edaaa63feddc8454a1 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/BaseHandler.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/BaseHandler.java @@ -1,7 +1,11 @@ package com.oszero.deliver.server.message.consumer.handler; +import com.oszero.deliver.server.constant.TraceIdConstant; import com.oszero.deliver.server.enums.StatusEnum; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.model.dto.SendTaskDto; +import com.oszero.deliver.server.util.IpUtils; +import com.oszero.deliver.server.util.MDCUtils; import com.oszero.deliver.server.web.service.MessageRecordService; import lombok.extern.slf4j.Slf4j; @@ -15,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; public abstract class BaseHandler { protected MessageRecordService messageRecordService; + protected MessageLinkTraceLogger messageLinkTraceLogger; /** * 消息处理 @@ -29,6 +34,17 @@ public abstract class BaseHandler { // 3. 后置处理 记录消息,消息发送成功 log.info("消息消费成功,记录消息"); + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + , sendTaskDto.getTemplateId() + , sendTaskDto.getAppId() + , sendTaskDto.getUsers() + , sendTaskDto.getRetried() + , sendTaskDto.getRetry() + , IpUtils.getClientIp() + , "消息消费成功"); + + sendTaskDto.getUsers() .forEach(user -> messageRecordService.saveMessageRecord( @@ -36,6 +52,16 @@ public abstract class BaseHandler { StatusEnum.ON, user )); + + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + , sendTaskDto.getTemplateId() + , sendTaskDto.getAppId() + , sendTaskDto.getUsers() + , sendTaskDto.getRetried() + , sendTaskDto.getRetry() + , IpUtils.getClientIp() + , "消息记录成功"); } protected abstract void handle(SendTaskDto sendTaskDto) throws Exception; diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/impl/DingHandler.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/impl/DingHandler.java index 3eb2c8d0d8e3928feecdb60adb0046d1dd356df8..c916e842f7465bcb6952a97e467884b21846e399 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/impl/DingHandler.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/handler/impl/DingHandler.java @@ -1,6 +1,7 @@ package com.oszero.deliver.server.message.consumer.handler.impl; import cn.hutool.json.JSONUtil; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.message.consumer.handler.BaseHandler; import com.oszero.deliver.server.model.app.DingApp; import com.oszero.deliver.server.model.dto.SendTaskDto; @@ -23,12 +24,14 @@ public class DingHandler extends BaseHandler { private final DingClient dingClient; private final AesUtils aesUtils; - public DingHandler(DingClient dingClient, MessageRecordService messageRecordService, AesUtils aesUtils) { + public DingHandler(DingClient dingClient, MessageRecordService messageRecordService, AesUtils aesUtils, MessageLinkTraceLogger messageLinkTraceLogger) { this.dingClient = dingClient; this.messageRecordService = messageRecordService; this.aesUtils = aesUtils; + this.messageLinkTraceLogger = messageLinkTraceLogger; } + @Override protected void handle(SendTaskDto sendTaskDto) throws Exception { String appConfigJson = aesUtils.decrypt(sendTaskDto.getAppConfig()); diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/CommonConsumer.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/CommonConsumer.java index c9b98e9f9cb35d5a323a61aea12fbbd5e32e9f1a..bef6f010bfbfab622c61b9ab11b1c7cae7bcbdff 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/CommonConsumer.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/CommonConsumer.java @@ -3,9 +3,11 @@ package com.oszero.deliver.server.message.consumer.rocketmq; import cn.hutool.json.JSONUtil; import com.oszero.deliver.server.constant.TraceIdConstant; import com.oszero.deliver.server.enums.StatusEnum; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.message.consumer.handler.BaseHandler; import com.oszero.deliver.server.message.producer.Producer; import com.oszero.deliver.server.model.dto.SendTaskDto; +import com.oszero.deliver.server.util.IpUtils; import com.oszero.deliver.server.util.MDCUtils; import com.oszero.deliver.server.web.service.MessageRecordService; import lombok.RequiredArgsConstructor; @@ -27,6 +29,7 @@ public class CommonConsumer { private final MessageRecordService messageRecordService; private final Producer producer; + private final MessageLinkTraceLogger messageLinkTraceLogger; public void omMessageAck(MessageExt messageExt, BaseHandler handler) { SendTaskDto sendTaskDto = null; @@ -34,8 +37,8 @@ public class CommonConsumer { sendTaskDto = JSONUtil.toBean( new String(messageExt.getBody(), StandardCharsets.UTF_8 ), SendTaskDto.class); - MDCUtils.put(TraceIdConstant.TRACE_ID, sendTaskDto.getTraceId()); handler.doHandle(sendTaskDto); + return; } catch (Exception exception) { if (!Objects.isNull(sendTaskDto) && sendTaskDto.getRetry() > 0) { // 记录消息消费失败 @@ -51,5 +54,17 @@ public class CommonConsumer { producer.sendMessage(sendTaskDto); } } + + messageLinkTraceLogger.error("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + , sendTaskDto.getTemplateId() + , sendTaskDto.getAppId() + , sendTaskDto.getUsers() + , sendTaskDto.getRetried() + , sendTaskDto.getRetry() + , IpUtils.getClientIp() + , "消息消费失败"); + } + } diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/DingConsumer.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/DingConsumer.java index 7e010f5e6c292088f88f51f7d7e7f4eecf01981e..f71abd542615be004627c26a99a77b156df69027 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/DingConsumer.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/consumer/rocketmq/DingConsumer.java @@ -1,7 +1,13 @@ package com.oszero.deliver.server.message.consumer.rocketmq; +import cn.hutool.json.JSONUtil; import com.oszero.deliver.server.constant.MQConstant; +import com.oszero.deliver.server.constant.TraceIdConstant; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.message.consumer.handler.impl.DingHandler; +import com.oszero.deliver.server.model.dto.SendTaskDto; +import com.oszero.deliver.server.util.IpUtils; +import com.oszero.deliver.server.util.MDCUtils; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -11,6 +17,8 @@ import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; +import java.nio.charset.StandardCharsets; + /** * 钉钉 RocketMQConsumer * @@ -26,6 +34,7 @@ public class DingConsumer implements RocketMQListener { private final DingHandler dingHandler; private final CommonConsumer commonConsumer; + private final MessageLinkTraceLogger messageLinkTraceLogger; /** * 没有报错,就签收 @@ -37,7 +46,23 @@ public class DingConsumer implements RocketMQListener { @Override public void onMessage(MessageExt messageExt) { log.info("[DingConsumer 接收到消息] {}", messageExt); + + SendTaskDto sendTaskDto = JSONUtil.toBean( + new String(messageExt.getBody(), StandardCharsets.UTF_8 + ), SendTaskDto.class); + MDCUtils.put(TraceIdConstant.TRACE_ID, sendTaskDto.getTraceId()); + + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + , sendTaskDto.getTemplateId() + , sendTaskDto.getAppId() + , sendTaskDto.getUsers() + , sendTaskDto.getRetried() + , sendTaskDto.getRetry() + , IpUtils.getClientIp() + , "[DingConsumer 接收到消息] {}", messageExt); commonConsumer.omMessageAck(messageExt, dingHandler); + } } diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/producer/impl/RocketMQProducer.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/producer/impl/RocketMQProducer.java index 1843353944b1cb9a930df29a6ac44fe9f1120e46..a75060ae99f1cde00dcaab5de5c9b15214acd9f2 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/producer/impl/RocketMQProducer.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/message/producer/impl/RocketMQProducer.java @@ -2,11 +2,15 @@ package com.oszero.deliver.server.message.producer.impl; import cn.hutool.json.JSONUtil; import com.oszero.deliver.server.constant.MQConstant; +import com.oszero.deliver.server.constant.TraceIdConstant; import com.oszero.deliver.server.enums.ChannelTypeEnum; import com.oszero.deliver.server.exception.BusinessException; import com.oszero.deliver.server.exception.MessageException; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.message.producer.Producer; import com.oszero.deliver.server.model.dto.SendTaskDto; +import com.oszero.deliver.server.util.IpUtils; +import com.oszero.deliver.server.util.MDCUtils; import com.oszero.deliver.server.util.RocketMQUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,6 +33,7 @@ import java.util.Objects; @ConditionalOnProperty(value = "mq-type", havingValue = "rocketmq") public class RocketMQProducer implements Producer { private final RocketMQUtils rocketMQUtils; + private final MessageLinkTraceLogger messageLinkTraceLogger; @Override public void sendMessage(SendTaskDto sendTaskDto) { @@ -65,12 +70,23 @@ public class RocketMQProducer implements Producer { } if (!Objects.isNull(sendResult) && Objects.equals(SendStatus.SEND_OK, sendResult.getSendStatus())) { log.info("模板 ID " + sendTaskDto.getTemplateId() + " RocketMQ 消息发送成功"); + + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + ,sendTaskDto.getTemplateId() + ,sendTaskDto.getAppId() + ,sendTaskDto.getUsers() + ,sendTaskDto.getRetried() + ,sendTaskDto.getRetry() + , IpUtils.getClientIp() + ,"模板 ID + sendTaskDto.getTemplateId() + RocketMQ 消息发送成功"); } else { // 消息再次重试发送 retry(sendTaskDto); } } + /** * 重新发送消息 * diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/LinkHandler.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/LinkHandler.java index 5bc07b6ffca5fe3032c8ae1701bbcdcefa0fab79..6120dd9dd46cbba6f7ee039227274bce26f165b8 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/LinkHandler.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/LinkHandler.java @@ -1,7 +1,12 @@ package com.oszero.deliver.server.pretreatment.link; import cn.hutool.core.collection.CollUtil; +import com.oszero.deliver.server.constant.TraceIdConstant; import com.oszero.deliver.server.exception.MessageException; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; +import com.oszero.deliver.server.model.dto.SendTaskDto; +import com.oszero.deliver.server.util.IpUtils; +import com.oszero.deliver.server.util.MDCUtils; import lombok.Data; import lombok.experimental.Accessors; import lombok.extern.slf4j.Slf4j; @@ -26,6 +31,8 @@ public class LinkHandler { * 模板映射 */ private Map templateConfig = null; + private MessageLinkTraceLogger messageLinkTraceLogger = null; + /** * 执行责任链 @@ -37,18 +44,27 @@ public class LinkHandler { //1. 前置检查 preCheck(context); + SendTaskDto sendTaskDto = (SendTaskDto) context.getProcessModel(); + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + ,sendTaskDto.getTemplateId() + ,sendTaskDto.getAppId() + ,sendTaskDto.getUsers() + ,sendTaskDto.getRetried() + ,sendTaskDto.getRetry() + ,IpUtils.getClientIp() + ,"前置检查成功"); //2. 遍历流程节点 List processList = templateConfig.get(context.getCode()).getProcessList(); for (BusinessLink businessLink : processList) { businessLink.process(context); } - return context; } /** - * 执行前检查检查参数是否达到要去,出错则抛出异常 + * 执行前检查检查参数是否达到要求,出错则抛出异常 * * @param context 执行上下文 */ diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/idcheck/DingUserIdCheck.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/idcheck/DingUserIdCheck.java index c44d2d9924091fbfd8ae1b7fa8229f51e75c7768..7980b497d5139852e76669a5f78b01ec34351516 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/idcheck/DingUserIdCheck.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/idcheck/DingUserIdCheck.java @@ -1,12 +1,16 @@ package com.oszero.deliver.server.pretreatment.link.idcheck; import cn.hutool.json.JSONUtil; +import com.oszero.deliver.server.client.DingClient; +import com.oszero.deliver.server.constant.TraceIdConstant; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.model.app.DingApp; import com.oszero.deliver.server.model.dto.SendTaskDto; import com.oszero.deliver.server.pretreatment.link.BusinessLink; import com.oszero.deliver.server.pretreatment.link.LinkContext; import com.oszero.deliver.server.util.AesUtils; -import com.oszero.deliver.server.client.DingClient; +import com.oszero.deliver.server.util.IpUtils; +import com.oszero.deliver.server.util.MDCUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -25,6 +29,7 @@ public class DingUserIdCheck implements BusinessLink { private final DingClient dingClient; private final AesUtils aesUtils; + private final MessageLinkTraceLogger messageLinkTraceLogger; @Override public void process(LinkContext context) { @@ -40,5 +45,16 @@ public class DingUserIdCheck implements BusinessLink { String accessToken = dingClient.getAccessToken(dingApp); users.forEach(userId -> dingClient.checkId(accessToken, userId)); } + + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + ,sendTaskDto.getTemplateId() + ,sendTaskDto.getAppId() + ,sendTaskDto.getUsers() + ,sendTaskDto.getRetried() + ,sendTaskDto.getRetry() + , IpUtils.getClientIp() + ,"钉钉 userId 检查成功"); + } } diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/DingParamCheck.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/DingParamCheck.java index 8dce01d54b9b3967e8d669c9996ebe471c06b2ef..d95c52b7872e8ebf1d58a3e9cb276524de84c486 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/DingParamCheck.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/paramcheck/ding/DingParamCheck.java @@ -1,13 +1,17 @@ package com.oszero.deliver.server.pretreatment.link.paramcheck.ding; import cn.hutool.json.JSONUtil; +import com.oszero.deliver.server.constant.TraceIdConstant; import com.oszero.deliver.server.exception.MessageException; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.model.app.DingApp; import com.oszero.deliver.server.model.dto.SendTaskDto; import com.oszero.deliver.server.pretreatment.link.BusinessLink; import com.oszero.deliver.server.pretreatment.link.LinkContext; import com.oszero.deliver.server.pretreatment.link.paramcheck.ParamStrategy; import com.oszero.deliver.server.util.AesUtils; +import com.oszero.deliver.server.util.IpUtils; +import com.oszero.deliver.server.util.MDCUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -28,6 +32,7 @@ public class DingParamCheck implements BusinessLink { private final Map dingParamStrategyMap; private final AesUtils aesUtils; + private final MessageLinkTraceLogger messageLinkTraceLogger; @Override public void process(LinkContext context) { @@ -67,5 +72,14 @@ public class DingParamCheck implements BusinessLink { throw new MessageException("钉钉消息参数校验失败," + e.getMessage() + "!!!"); } + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + ,sendTaskDto.getTemplateId() + ,sendTaskDto.getAppId() + ,sendTaskDto.getUsers() + ,sendTaskDto.getRetried() + ,sendTaskDto.getRetry() + , IpUtils.getClientIp() + ,"钉钉参数校验成功"); } } diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/pushrangecheck/PushRangeCheck.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/pushrangecheck/PushRangeCheck.java index 9d5ad1b6d5d33641e47c23480061bc7139c70ab8..e9a093bd02f1ac85457c5a389598813fd892bdd9 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/pushrangecheck/PushRangeCheck.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/pretreatment/link/pushrangecheck/PushRangeCheck.java @@ -1,12 +1,16 @@ package com.oszero.deliver.server.pretreatment.link.pushrangecheck; +import com.oszero.deliver.server.constant.TraceIdConstant; import com.oszero.deliver.server.enums.ChannelTypeEnum; import com.oszero.deliver.server.enums.PushRangeEnum; import com.oszero.deliver.server.enums.UsersTypeEnum; import com.oszero.deliver.server.exception.MessageException; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.model.dto.SendTaskDto; import com.oszero.deliver.server.pretreatment.link.BusinessLink; import com.oszero.deliver.server.pretreatment.link.LinkContext; +import com.oszero.deliver.server.util.IpUtils; +import com.oszero.deliver.server.util.MDCUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -20,6 +24,8 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class PushRangeCheck implements BusinessLink { + private final MessageLinkTraceLogger messageLinkTraceLogger; + /** * 真正处理逻辑 * @@ -32,6 +38,15 @@ public class PushRangeCheck implements BusinessLink { Integer usersType = sendTaskDto.getUsersType(); Integer channelType = sendTaskDto.getChannelType(); if (PushRangeEnum.ALL.getCode().equals(pushRange) || PushRangeEnum.INNER.getCode().equals(pushRange)) { + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + , MDCUtils.get(TraceIdConstant.TRACE_ID) + ,sendTaskDto.getTemplateId() + ,sendTaskDto.getAppId() + ,sendTaskDto.getUsers() + ,sendTaskDto.getRetried() + ,sendTaskDto.getRetry() + , IpUtils.getClientIp() + ,"推送范围检测成功"); return; } if ( diff --git a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/web/service/impl/SendServiceImpl.java b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/web/service/impl/SendServiceImpl.java index 07a71d373b5732612d5d007d8337c13017bfb94d..1f0f0557c1a7207a667ba194283e373c0e6c16f7 100644 --- a/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/web/service/impl/SendServiceImpl.java +++ b/deliver-backend/deliver-backend-server/src/main/java/com/oszero/deliver/server/web/service/impl/SendServiceImpl.java @@ -3,9 +3,9 @@ package com.oszero.deliver.server.web.service.impl; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.oszero.deliver.server.constant.TraceIdConstant; -import com.oszero.deliver.server.enums.ResultEnum; import com.oszero.deliver.server.enums.StatusEnum; import com.oszero.deliver.server.exception.BusinessException; +import com.oszero.deliver.server.log.MessageLinkTraceLogger; import com.oszero.deliver.server.model.dto.PushWayDto; import com.oszero.deliver.server.model.dto.SendTaskDto; import com.oszero.deliver.server.model.dto.request.SendRequestDto; @@ -15,6 +15,7 @@ import com.oszero.deliver.server.model.entity.TemplateApp; import com.oszero.deliver.server.pretreatment.link.LinkContext; import com.oszero.deliver.server.pretreatment.link.LinkHandler; import com.oszero.deliver.server.pretreatment.link.LinkModel; +import com.oszero.deliver.server.util.IpUtils; import com.oszero.deliver.server.util.MDCUtils; import com.oszero.deliver.server.web.service.AppService; import com.oszero.deliver.server.web.service.SendService; @@ -43,6 +44,8 @@ public class SendServiceImpl implements SendService { private final TemplateAppService templateAppService; private final AppService appService; private final LinkHandler linkHandler; + private final MessageLinkTraceLogger messageLinkTraceLogger; + @Override public String send(SendRequestDto sendRequestDto) { @@ -57,6 +60,15 @@ public class SendServiceImpl implements SendService { if (StatusEnum.OFF.getStatus().equals(template.getTemplateStatus())) { throw new BusinessException("此模板已关闭,再次使用请启用此模板!!!"); } + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + ,MDCUtils.get(TraceIdConstant.TRACE_ID) + ,templateId + ,null + ,sendRequestDto.getUsers() + ,null + ,sendRequestDto.getRetry() + ,IpUtils.getClientIp() + ,"成功获取到消息模版id"); // 2.通过 templateId 获取 appId LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -65,8 +77,19 @@ public class SendServiceImpl implements SendService { if (Objects.isNull(templateApp)) { throw new BusinessException("未获取到模板所关联的应用,请检查关联的应用是否存在!!!"); } + Long appId = templateApp.getAppId(); + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + ,MDCUtils.get(TraceIdConstant.TRACE_ID) + ,templateId + ,appId + ,sendRequestDto.getUsers() + ,null + ,sendRequestDto.getRetry() + ,IpUtils.getClientIp() + ,"成功获取到AppId"); + // 3.得到 appConfig App app = appService.getById(appId); if (Objects.isNull(app)) { @@ -102,6 +125,19 @@ public class SendServiceImpl implements SendService { .traceId(MDCUtils.get(TraceIdConstant.TRACE_ID)) // 全局链路 id .retry(retry).build(); + + + messageLinkTraceLogger.info("消息链路 ID: {}, 模板 ID: {}, 应用 ID: {}, 接收人列表: {}, 是否重试消息: {}, 重试次数剩余: {}, 请求 IP: {}, 处理信息: {}" + ,MDCUtils.get(TraceIdConstant.TRACE_ID) + ,templateId + ,appId + ,sendRequestDto.getUsers() + ,sendTaskDto.getRetried() + ,sendRequestDto.getRetry() + ,IpUtils.getClientIp() + ,"sendTaskDto封装完成"); + + // 6.处理相关责任链 LinkContext context = LinkContext.builder() .processModel(sendTaskDto)