采集数据的任务-数据的采集
在上一章中讲解了项目中责任链的加载和执行过程,从本章节开始会详细讲解责任链中每一个节点的执行逻辑
采集节点
org.javaup.chain.impl.GatherDataChainHandler#handler
protected void handler(final TotalParamTransfers totalParamTransfers) {
ParamTransfers paramTransfers = totalParamTransfers.getParamTransfers();
//获取采集处理器 包括 基础维度和高级维度
//如果业务的维度是video,时间的维度是day,那么采集处理器就是基础维度,其他的都是高级维度
GatherHandler gatherHandler =
gatherHandlerContext.getGatherHandler(paramTransfers.getVideoDimensionType().getValue() + UNDER_LINE
+ paramTransfers.getRequestTime().getDateType().getValue());
if (Objects.isNull(gatherHandler)) {
return;
}
//采集数据
gatherHandler.doGather(totalParamTransfers);
}
获取采集处理器
GatherHandler gatherHandler =
gatherHandlerContext.getGatherHandler(paramTransfers.getVideoDimensionType().getValue() + UNDER_LINE
+ paramTransfers.getRequestTime().getDateType().getValue());
这里依旧是使用了熟悉的策略模式,项目中用到此模式的地方非常的多,所以建议大家要掌握此模式的使用
采集处理器接口接口
首先要定义采集执行的顶层设计,规定好有要执行的方法,以及采集维度类型
public interface GatherHandler {
/**
* 采集数据
* @param totalParamTransfers 总参数传输对象
* */
void doGather(TotalParamTransfers totalParamTransfers);
/**
* 获取采集维度类型(基础 或者 高级)
* @return 规则类型
* */
List<String> queryDimensionTypeList();
}
项目中对于GatherHandler
的实现有基础维度采集BaseGatherHandler
,高级采集器AdvancedGatherHandler
采集处理器上下文
有了策略后,要将所有的策略放到上下文中,这样就可以根据策略类型来获取对应的实现策略处理了
@Component
public class GatherHandlerContext {
@Autowired
private List<GatherHandler> gatherHandlerList;
private Map<String, GatherHandler> gatherHandlerMap = new HashMap<>();
@PostConstruct
public void init(){
for (GatherHandler gatherHandler : gatherHandlerList) {
List<String> dimensionTypeList = gatherHandler.queryDimensionTypeList();
for (final String dimensionType : dimensionTypeList) {
gatherHandlerMap.put(dimensionType, gatherHandler);
}
}
}
public GatherHandler getGatherHandler(String dimensionType) {
return gatherHandlerMap.get(dimensionType);
}
}