集信达项目总结
1.项目结构介绍
1.1 pd-sms-api:这个是给需要调用这个服务的使用的 发送短信的 短信接收服务
1.2 pd-sms-entity:对应数据库的字段 实体类
1.3 pd-sms-manage:系统管理服务就是后台管理
1.4 pd-sms-server: 发送短信服务 发送请求到第三方短信平台
1.5 pd-sms-sdk:开发工具包,提高代码的重复使用,提高效率
2. 什么是中台
中台,互联网术语,一般应用于大型企业。一般是指搭建一个灵活快速应对变化的架构,快速实现前端提的需求,避免重复建设,达到提高工作效率目的。
3. 项目核心
本项目(集信达短信平台)的核心在于保证短信高效、准确的送达、简单易操作的对接方式。通过对服务的解耦、通讯方式的升级来提升系统的吞吐量。同时在多通道的加持下,通过智能动态的通道评级、选举、降级、热插拔,增强了系统的健壮性,摆脱对单一通道的依赖。并且提供多种对接方式,满足企业内部的各种需求。
4.项目架构
5. 项目中用了哪些技术?
SpringBoot,Nacos,mybaties,mysql,redis
6.功能清单
7. 数据模型与类
序号 | 表名 | 类名 | 说明 |
---|---|---|---|
1 | signature | SignatureEntity | 短信签名 |
2 | template | TemplateEntity | 短信模板 |
3 | config | ConfigEntity | 通道配置 |
4 | config_signature | ConfigSignatureEntity | 通道与签名关系 |
5 | config_template | ConfigTemplateEntity | 通道与模板关系 |
6 | platform | PlatformEntity | 接入平台(应用管理) |
7 | receive_log | ReceiveLogEntity | 短信接收日志 |
8 | manual_process | ManualProcessEntity | 人工处理任务 |
9 | send_log | SendLogEntity | 短信发送日志 |
10 | black_list | BlackListEntity | 黑名单 |
11 | timing_push | TimingPushEntity | 定时发送 |
8.后台管理服务
8.1 基础工程
基础工程为pd-sms-entity工程,主要是一些实体类、DTO、工具类、Mapper接口等,作为基础模块,其他几个服务都会依赖此基础模块。
8.2 管理端工程
pd-sms-manage作为后台管理服务的maven工程,主要功能是对基础数据进行维护操作,例如签名管理、模板管理、通道管理、通道优先级配置、数据统计等。
8.3 基础属性自动注入
功能:通过自定义注解和切面,在进行数据维护时实现实体中基础属性的自动赋值(创建者、创建时间、修改者、修改者)。
9. 自定义注解
注解@interface 与interface class是同一个级别的,相当于一种记号,注解本身是没有功能的,只有在解析注解的时候才可以添加一些功能,注解的底层是通过反射来实现的
@Documented
类和方法的 Annotation 在缺省情况下是不出现在 javadoc 中的。如果使用 @Documented 修饰该 Annotation,则表示它可以出现在 javadoc 中。定义 Annotation 时,@Documented 可有可无;若没有定义,则 Annotation 不会出现在 javadoc 中。
@Target(ElementType.TYPE)
ElementType 是 Annotation 的类型属性。而 @Target 的作用,就是来指定 Annotation 的类型属性。@Target(ElementType.TYPE) 的意思就是指定该 Annotation 的类型是 ElementType.TYPE。这就意味着,MyAnnotation1 是来修饰"类、接口(包括注释类型)或枚举声明"的注解。
定义 Annotation 时,@Target 可有可无。若有 @Target,则该 Annotation 只能用于它所指定的地方;若没有 @Target,则该 Annotation 可以用于任何地方。
@Targer() 约束自定义注解可以在什么地方,值是从ElementType里获取的,可以添加多个
public enum ElementType {
TYPE, /* 类、接口(包括注释类型)或枚举声明 /
FIELD, / 字段声明(包括枚举常量) /
METHOD, / 方法声明 /
PARAMETER, / 参数声明 /
CONSTRUCTOR, / 构造方法声明 /
LOCAL_VARIABLE, / 局部变量声明 /
ANNOTATION_TYPE, / 注释类型声明 /
PACKAGE / 包声明 */
}
@Retention:自定义注解保留到什么阶段(生命周期),值是从枚举类RetentPolicy里获取的
RetentionPolicy.SOURCE:自定义注解保留到源码阶段,字节码阶段和运行阶段是没有的
RetentionPolicy.CLASS:自定义注解保留到字节码阶段,运行阶段是没有的
RetentionPolicy.RUNTIME:自定义注解保留到运行阶段
public enum RetentionPolicy {
SOURCE, /* Annotation信息仅存在于编译器处理期间编译器处理完之后就没有该Annotation信息了 /
CLASS, / 编译器将Annotation存储于类对应的.class文件中。默认行为 /
RUNTIME / 编译器将Annotation存储于class文件中,并且可由JVM读入 */
}
10.什么是Spring AOP
AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
这里我们用到的是静态AOP切面
主要是由切面和切点构成的:
·切点(PointCut): 可以插入增强处理的连接点。
·切面(Aspect): 切面是通知和切点的结合。
10.1Spring AOP 中有 5 中通知类型,分别如下:
11.反射
获取Class常用API
11.1.调用运行时类本身的.class属性
Class clazz = String.class;