Commit 99feec45356e3273b71a0a49573251b723fda147

Authored by YunaiV
1 parent ab4e6d08

项目结构调整 x 22 : 优化 trace;将 sms 的集成测试,移到 biz-sms 下

Showing 10 changed files with 88 additions and 17 deletions
README.md
@@ -40,10 +40,6 @@ @@ -40,10 +40,6 @@
40 | 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | 40 | 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 |
41 | | 通知公告 | 系统通知公告信息发布维护 | 41 | | 通知公告 | 系统通知公告信息发布维护 |
42 42
43 -计划新增功能:  
44 -* 邮件  
45 -* 钉钉、飞书等通知  
46 -  
47 ### 基础设施 43 ### 基础设施
48 44
49 | | 功能 | 描述 | 45 | | 功能 | 描述 |
@@ -63,9 +59,6 @@ @@ -63,9 +59,6 @@
63 | 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 | 59 | 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
64 | 🚀 | 单元测试 |基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | 60 | 🚀 | 单元测试 |基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
65 61
66 -计划新增:  
67 -* 工作流  
68 -  
69 ### 研发工具 62 ### 研发工具
70 63
71 | | 功能 | 描述 | 64 | | 功能 | 描述 |
yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/sms/core/client/package-info.java deleted
1 -package cn.iocoder.yudao.adminserver.framework.sms.core.client;  
yudao-framework/yudao-spring-boot-starter-biz-sms/pom.xml
@@ -27,6 +27,12 @@ @@ -27,6 +27,12 @@
27 <artifactId>spring-boot-starter</artifactId> 27 <artifactId>spring-boot-starter</artifactId>
28 </dependency> 28 </dependency>
29 29
  30 + <!-- 监控相关 -->
  31 + <dependency>
  32 + <groupId>io.opentracing</groupId>
  33 + <artifactId>opentracing-util</artifactId> <!-- aliyun 短信需要,进行链路追踪 -->
  34 + </dependency>
  35 +
30 <!-- Test 测试相关 --> 36 <!-- Test 测试相关 -->
31 <dependency> 37 <dependency>
32 <groupId>cn.iocoder.boot</groupId> 38 <groupId>cn.iocoder.boot</groupId>
yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/sms/core/client/impl/aliyun/AliyunSmsClientIntegrationTest.java renamed to yudao-framework/yudao-spring-boot-starter-biz-sms/src/test-integration/java/cn/iocoder/yudao/framework/sms/core/client/impl/aliyun/AliyunSmsClientIntegrationTest.java
1 -package cn.iocoder.yudao.adminserver.framework.sms.core.client.impl.aliyun; 1 +package cn.iocoder.yudao.framework.sms.core.client.impl.aliyun;
2 2
3 import cn.iocoder.yudao.framework.common.core.KeyValue; 3 import cn.iocoder.yudao.framework.common.core.KeyValue;
4 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; 4 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/sms/core/client/impl/debug/DebugDingTalkSmsClientIntegrationTest.java renamed to yudao-framework/yudao-spring-boot-starter-biz-sms/src/test-integration/java/cn/iocoder/yudao/framework/sms/core/client/impl/debug/DebugDingTalkSmsClientIntegrationTest.java
1 -package cn.iocoder.yudao.adminserver.framework.sms.core.client.impl.debug; 1 +package cn.iocoder.yudao.framework.sms.core.client.impl.debug;
2 2
3 import cn.iocoder.yudao.framework.common.core.KeyValue; 3 import cn.iocoder.yudao.framework.common.core.KeyValue;
4 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; 4 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
yudao-admin-server/src/test-integration/java/cn/iocoder/yudao/adminserver/framework/sms/core/client/impl/yunpian/YunpianSmsClientIntegrationTest.java renamed to yudao-framework/yudao-spring-boot-starter-biz-sms/src/test-integration/java/cn/iocoder/yudao/framework/sms/core/client/impl/yunpian/YunpianSmsClientIntegrationTest.java
1 -package cn.iocoder.yudao.adminserver.framework.sms.core.client.impl.yunpian; 1 +package cn.iocoder.yudao.framework.sms.core.client.impl.yunpian;
2 2
3 import cn.iocoder.yudao.framework.common.core.KeyValue; 3 import cn.iocoder.yudao.framework.common.core.KeyValue;
4 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; 4 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoTracerAutoConfiguration.java
@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.tracer.core.aop.BizTraceAspect; @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.tracer.core.aop.BizTraceAspect;
4 import cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter; 4 import cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter;
5 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum; 5 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
6 import io.opentracing.Tracer; 6 import io.opentracing.Tracer;
  7 +import io.opentracing.util.GlobalTracer;
7 import org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer; 8 import org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer;
8 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; 9 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
9 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 10 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -25,21 +26,22 @@ import org.springframework.context.annotation.Configuration; @@ -25,21 +26,22 @@ import org.springframework.context.annotation.Configuration;
25 public class YudaoTracerAutoConfiguration { 26 public class YudaoTracerAutoConfiguration {
26 27
27 @Bean 28 @Bean
28 - @ConditionalOnMissingBean  
29 public TracerProperties bizTracerProperties() { 29 public TracerProperties bizTracerProperties() {
30 return new TracerProperties(); 30 return new TracerProperties();
31 } 31 }
32 32
33 @Bean 33 @Bean
34 - @ConditionalOnMissingBean  
35 public BizTraceAspect bizTracingAop() { 34 public BizTraceAspect bizTracingAop() {
36 return new BizTraceAspect(tracer()); 35 return new BizTraceAspect(tracer());
37 } 36 }
38 37
39 @Bean 38 @Bean
40 - @ConditionalOnMissingBean  
41 public Tracer tracer() { 39 public Tracer tracer() {
42 - return new SkywalkingTracer(); 40 + // 创建 SkywalkingTracer 对象
  41 + SkywalkingTracer tracer = new SkywalkingTracer();
  42 + // 设置为 GlobalTracer 的追踪器
  43 + GlobalTracer.register(tracer);
  44 + return tracer;
43 } 45 }
44 46
45 /** 47 /**
yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/aop/BizTraceAspect.java
@@ -4,15 +4,16 @@ import cn.hutool.core.map.MapUtil; @@ -4,15 +4,16 @@ import cn.hutool.core.map.MapUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.tracer.core.annotation.BizTrace; 5 import cn.iocoder.yudao.framework.tracer.core.annotation.BizTrace;
6 import cn.iocoder.yudao.framework.common.util.sping.SpringExpressionUtils; 6 import cn.iocoder.yudao.framework.common.util.sping.SpringExpressionUtils;
  7 +import cn.iocoder.yudao.framework.tracer.core.util.TracerFrameworkUtils;
7 import io.opentracing.Span; 8 import io.opentracing.Span;
8 import io.opentracing.Tracer; 9 import io.opentracing.Tracer;
  10 +import io.opentracing.tag.Tags;
9 import lombok.AllArgsConstructor; 11 import lombok.AllArgsConstructor;
10 import lombok.extern.slf4j.Slf4j; 12 import lombok.extern.slf4j.Slf4j;
11 import org.aspectj.lang.ProceedingJoinPoint; 13 import org.aspectj.lang.ProceedingJoinPoint;
12 import org.aspectj.lang.annotation.Around; 14 import org.aspectj.lang.annotation.Around;
13 import org.aspectj.lang.annotation.Aspect; 15 import org.aspectj.lang.annotation.Aspect;
14 16
15 -import javax.annotation.Resource;  
16 import java.util.Map; 17 import java.util.Map;
17 18
18 import static java.util.Arrays.asList; 19 import static java.util.Arrays.asList;
@@ -35,10 +36,15 @@ public class BizTraceAspect { @@ -35,10 +36,15 @@ public class BizTraceAspect {
35 public Object around(ProceedingJoinPoint joinPoint, BizTrace trace) throws Throwable { 36 public Object around(ProceedingJoinPoint joinPoint, BizTrace trace) throws Throwable {
36 // 创建 span 37 // 创建 span
37 String operationName = getOperationName(joinPoint, trace); 38 String operationName = getOperationName(joinPoint, trace);
38 - Span span = tracer.buildSpan(operationName).start(); 39 + Span span = tracer.buildSpan(operationName)
  40 + .withTag(Tags.COMPONENT.getKey(), "biz")
  41 + .startManual();
39 try { 42 try {
40 // 执行原有方法 43 // 执行原有方法
41 return joinPoint.proceed(); 44 return joinPoint.proceed();
  45 + } catch (Throwable throwable) {
  46 + TracerFrameworkUtils.onError(throwable, span);
  47 + throw throwable;
42 } finally { 48 } finally {
43 // 设置 Span 的 biz 属性 49 // 设置 Span 的 biz 属性
44 setBizTag(span, joinPoint, trace); 50 setBizTag(span, joinPoint, trace);
yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/util/TracerFrameworkUtils.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.tracer.core.util;
  2 +
  3 +import io.opentracing.Span;
  4 +import io.opentracing.tag.Tags;
  5 +
  6 +import java.io.PrintWriter;
  7 +import java.io.StringWriter;
  8 +import java.util.HashMap;
  9 +import java.util.Map;
  10 +
  11 +/**
  12 + * 链路追踪 Util
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +public class TracerFrameworkUtils {
  17 +
  18 + /**
  19 + * 将异常记录到 Span 中,参考自 com.aliyuncs.utils.TraceUtils
  20 + *
  21 + * @param throwable 异常
  22 + * @param span Span
  23 + */
  24 + public static void onError(Throwable throwable, Span span) {
  25 + Tags.ERROR.set(span, Boolean.TRUE);
  26 + if (throwable != null) {
  27 + span.log(errorLogs(throwable));
  28 + }
  29 + }
  30 +
  31 + private static Map<String, Object> errorLogs(Throwable throwable) {
  32 + Map<String, Object> errorLogs = new HashMap<String, Object>(10);
  33 + errorLogs.put("event", Tags.ERROR.getKey());
  34 + errorLogs.put("error.object", throwable);
  35 + errorLogs.put("error.kind", throwable.getClass().getName());
  36 + String message = throwable.getCause() != null ? throwable.getCause().getMessage() : throwable.getMessage();
  37 + if (message != null) {
  38 + errorLogs.put("message", message);
  39 + }
  40 + StringWriter sw = new StringWriter();
  41 + throwable.printStackTrace(new PrintWriter(sw));
  42 + errorLogs.put("stack", sw.toString());
  43 + return errorLogs;
  44 + }
  45 +
  46 +}
更新日志.md 0 → 100644
  1 +## 计划中
  2 +
  3 +* 邮件
  4 +* 钉钉、飞书等通知
  5 +* 工作流
  6 +* 支付
  7 +* 三方平台接入
  8 +
  9 +## [v1.0.0] 2021.05.03
  10 +
  11 +### ⭐ New Features
  12 +
  13 +### ⚡️ Optimization
  14 +
  15 +### 🐞 Bug Fixes
  16 +
  17 +### 📔 Documentation
  18 +
  19 +### 🔨 Dependency Upgrades