采集数据的任务-数据的采集
在上一章中讲解了项目中责任链的加载和执行过程,从本章节开始会详细讲解责任链中每一个节点的执行逻辑
采集节点
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);
}
}
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的550+详细文档
- 讲解视频:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
