🍵自定义供应商扩展
功能介绍
自定义供应商扩展为V3.0.0新增功能
为使用者自行接入厂商提供的功能,使用者可以根据需要扩展系统尚未支持的其他短信供应商支持
在我们提供的demo中有关于自定义厂商的定义,如不理解可进行参考。
demo地址
实现接口
扩展短信服务中三个主要的接口:
- SmsBlend - 短信服务
- SupplierConfig - 供应商配置
- BaseProviderFactory - 构建短信服务的工厂
SmsBlend、SupplierConfig、BaseProviderFactory中都声明了getSupplier方法,用于获取供应商的标识。同一个供应商的实现中,供应商标识必须相同。
实现SmsBlend接口
SmsBlend是短信发送服务的通用接口,是短信发送实现的核心。接口主要声明了同步、异步、批量、延迟发送等方法。
为了便于扩展,框架定义了抽象类AbstractSmsBlend,该实现了SmsBlend接口部分方法,包括延迟发送、异步发送等内容。
建议通过实现抽象类AbstractSmsBlend的方式来进行自定义扩展。只需要实现同步发送和批量发送即可。
实现SupplierConfig接口
SupplierConfig是短信供应商配置接口,提供供应商所需要的全部个性化配置
为了便于扩展,框架定义了抽象类BaseConfig,内部已经定义了一些公用的参数如configId、权重weight、访问令牌accessKeyId和accessKeySecret等。
建议通过实现抽象类BaseConfig的方式来进行自定义扩展。
实现BaseProviderFactory接口
BaseProviderFactory是声明了创建SmsBlend方法的工厂接口,框架在需要构建SmsBlend实例时调用。
为了便于扩展,框架定义了抽象类AbstractProviderFactory,建议使用抽象类进行扩展。
接入框架
接入主要是将自定义的Factory实例注册到框架中,框架内部通过调用工厂方法构建SmsBlend短信服务实例。通常情况下SmsBlend实例是由框架内部托管,不需要使用者手动构建,使用时通过SmsFactory获取。
SpringBoot接入
使用@Bean声明Factory对象进行接入
例如:
@Configuration
public class FactoryConfig {
@Bean
public AbcSmsFactory abcSmsFactory() {
return AbcSmsFactory.instance();
}
}
JavaSE接入
在初始化时通过SEInitializer的registerFactory接入
例如:
// 实例化自定义的短信实现方式(根据实现方式实例化)
AbcSmsFactory factory = new AbcSmsFactory();
// 初始化配置
SEInitializer.initializer()
// 注册方法调用应在fromXXX方法之前,否则在fromXXX中会无法构建对应短信服务实例
.registerFactory(factory)
.fromYaml();
通用接入方式
使用ProviderFactoryHolder的registerFactory方法注入
例如:
// 实例化自定义的短信实现方式(根据实现方式实例化)
AbcSmsFactory factory = new AbcSmsFactory();
// 注入工厂实例
ProviderFactoryHolder.registerFactory(factory);
需要注意的是,使用这种方式要注意工厂实例与构建服务对象之间的顺序问题。
例如,通常情况下在SpringBoot项目中,框架在启动时就会读取短信配置并初始化服务实例,如果在初始化之前没有通过registerFactory注册工厂,那么在构建对应的SmsBlend短信服务实例时就会发生找不到工厂实例的问题。