跳至主要內容

🍵自定义供应商扩展

heng大约 4 分钟

功能介绍

自定义供应商扩展为V3.0.0新增功能

为使用者自行接入厂商提供的功能,使用者可以根据需要扩展系统尚未支持的其他短信供应商支持

在我们提供的demo中有关于自定义厂商的定义,如不理解可进行参考。
demo地址open in new window

实现接口

扩展短信服务中三个主要的接口:

  • 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短信服务实例时就会发生找不到工厂实例的问题。