最近接触一个应用,外部接收http请求后,去加载一些处理规则,再从文件服务器取一些文件,对文件数据进行加工后,产生结果数据,结果数据写入DB。这个过程中,全异步,多线程处理各环节。
初步的框架设计如下,明确了各单例与非单例对象的关系。欢迎提出建议与意见。
metaHolder是从db中加载一些数据处理用的元数据,规则等,可以缓存在本单元中。
fileDataPull是拉取一些文本文件中的数据,会放入queue中。
DataDeal是取上面queue中的数据,多线程用各handlers(责任链模式)处理一个数据。放在另一个queue中。具体会先New多个runnable(并发设置数量,new的参数有:取放的两个queue与handler),放入专用的线程池。
DataOutput会把queue中的数据入库。
dealContext是非单例对象,它持有请求与每个处理的结果(queue),实际处理时并不一定把整个context给一个处理单元,只给处理单元要的数据对象。
runnable对象不是context持有的,而是在处理单元中产生的。handlerChain也是run()方法中new出来的。