Skip to content

Processor机制

斩秋 edited this page Sep 28, 2018 · 2 revisions

Processor机制

随着业务的发展,对文件读写过程中不再是简单的读写,伴随一系列的额外的业务逻辑如:文件是否加密了, 是否计算读写的字节数,是否计算MD5值,oss的存储写完本地后是否触发上传到oss等这些额外逻辑使得代码不在干净,组件升级维护风险增加。

spring的BeanFactoryPostProcessor和BeanPostProcessor机制,使得用户在容器启动和对象实例化过程中介入,来定制个性化的业务需求;对于spring来说也可以将容器启动和对象实例化的中额外功能剥离开来,如PropertyPlaceholderConfigurer在容器启动过程对bean的定义中占位符进行替换,DefaultAdvisorAutoProxyCreator在对象实例化过程中创建aop的代理对象等。

同样rdf-file组件在文件读写过程中采用了这种processor的回调机制(组件的processor机制本身也是通过插件机制实现),将如文件是否加密, 是否计算读写的字节数,是否计算MD5值,oss的存储写完本地是否触发上传到oss等功能与主流程剥离开,用户也可以利用这种机制扩展业务功能。如图组件在读写过程中开放的回调埋点

组件埋点

如图:读写过程回调埋点

内置实现

proccesor实现配置默认存放于: META-INF/rdf-file/services/com.alipay.rdf.file.spi.RdfFileProcessorSpi 文件中

rdf-file-core文件内容

lengthReadValidator=com.alipay.rdf.file.validate.LengthReadValidator
lengthWriteValidator=com.alipay.rdf.file.validate.LengthWriteValidator
summary=com.alipay.rdf.file.summary.SummaryProcessor
fixLengthLineValidator=com.alipay.rdf.file.validate.FixLengthLineValidator
bodyRowValidtor=com.alipay.rdf.file.validate.BodyRowValidator

rdf-file-oss文件内容

md5OSSReadValidator=com.alipay.rdf.file.processor.MD5OSSReadValidator
md5OSSWriteValidator=com.alipay.rdf.file.processor.MD5OSSWriteValidator
uploadOSSAfterWriteClose=com.alipay.rdf.file.processor.UploadOSSAfterWriteClose
beforeCreateOssWriter=com.alipay.rdf.file.processor.BeforeCreateOssWriter

自动处理配置

processcor默认组件不会回调, 需要回需要将processor的key加入到 FileConfig.processorKeys参数中,
但是每次这样处理也比较烦,所以可以将自动需要处理的配置加入到配置文件中

配置文件地址默认是 META-INF/rdf-file/auto-processor文件夹中
如果是所有协议都用,放到default文件中

rdf-file-core

bodyRowValidtor

rdf-file-oss

uploadOSSAfterWriteClose
beforeCreateOssWriter

如果某种协议格式用的处理器,放入单独文件 文件取为协议名如 : fund

fixLengthLineValidator
Clone this wiki locally