跳到主要内容

高级维度数据的采集

通过之前的章节详细讲解了基础维度数据的采集、计算、保存是如何执行的,以及将采集维度进行了升级:

时间维度:DAY(天) 升级到了 WEEK(周)

并将升级后的数据发送到Kafka,以及Kafka接收到消息的过程

本章开始讲解维度升级后的采集是如何执行的

处理规则业务

在之前的章节也讲了,kafka消费到了消息后,真正的执行逻辑是调用了RuleHandler#handle方法来执行,它是每一次数据采集维度升级后的采集入口,所以要对它有一个比较深的印象

/**
* 处理规则业务逻辑
* */
public RuleHandleOutput handle(ParamTransfers paramTransfers){
//根据规则id查询指标信息
List<Metric> metricList = metricService.selectByRuleId(paramTransfers.getRuleId());
if (CollectionUtil.isEmpty(metricList)) {
return null;
}
TotalParamTransfers totalParamTransfers = new TotalParamTransfers(metricList, paramTransfers, null);
//根据规则的类型(采集 或者 查询)获取对应的数据处理器
DataHandler dataHandler =
dataHandlerContext.getDataHandler(paramTransfers.getRuleType().getCode());
if (Objects.isNull(dataHandler)){
return null;
}
//数据处理器执行
return dataHandler.dataHandle(totalParamTransfers);
}

由于此时的流程是时间采集维度升级后采集的过程,所以整个过程还是数据采集的类型下,所以dataHandler的具体实现策略依然是GatherDataHandler数据采集的处理器

数据采集的处理器

@Component
public class GatherDataHandler implements DataHandler {

@Autowired
private DataChainContext dataChainContext;


@Override
public RuleHandleOutput dataHandle(TotalParamTransfers totalParamTransfers){
//使用责任链进行数据的处理,包括:采集、计算、保存、升级维度等
dataChainContext.getDataChainHandler().executeChain(totalParamTransfers);
return null;
}

@Override
public Integer getRuleType() {
return RuleType.GATHER.getCode();
}
}

到这里相信小伙伴应该恍然大悟了吧,这不就又回到了责任链模式了吗!

没错!其实每一次的采集维度升级,包括:时间采集维度升级,类型采集维度升级,都要通过责任链进行采集

既然已经来到了责任链了,那么就还是从一个节点:采集节点(GatherDataChainHandler) 开始

采集节点(GatherDataChainHandler)

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);
}

在之前的章节讲解采集节点的执行时,因为当时执行的是采集最基础维度的数据,所以从gatherHandlerContext获取到的gatherHandler实际采集器是BaseGatherHandler基础维度采集

那么到了现在执行的责任链,时间维度已经变成了WEEK,所以gatherHandler实际采集器就不再是基础维度的,而是变成了高级维度采集器AdvancedGatherHandler

付费内容提示

该文档的全部内容仅对「码力全开」项目实战&技术讲解 知识星球用户开放

加入星球,一次获得完整项目资料、全栈技术知识库和长期答疑服务。

100万+字全栈技术知识库深入讲解技术核心、数据库、中间件和分布式等内容
8套热门的实战项目持续更新的企业级项目覆盖高并发、微服务、数据中台 和 AI Agent 等方向
AI 技术知识大模型面试详解覆盖 AI 模型原理、Agent、RAG、MCP、Skills、Harness 等核心知识点
文档 + 视频两种讲解形式既能系统阅读,也能跟随视频理解核心业务

完整项目实战资料

每套项目均包含从 0 到 1 讲解文档核心业务讲解视频

从基础项目到复杂业务场景,项目资料会持续更新。

8 套项目
  • 01Nexus Agent AI 智能体
  • 02Nexus Agent Pro 完全版
  • 03黑马点评Plus
  • 04大麦
  • 05大麦Pro
  • 06大麦AI
  • 07流量切换
  • 08数据中台

加入后还能获得

进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。

从学习、面试到项目启动,都可以继续获得支持。

  • 1 对 1 解答项目和技术问题都可以提问
  • 针对性补充没有讲清楚的内容会继续补充
  • 面试与简历指导梳理回答技巧和项目亮点
  • 中间件云环境项目依赖可以直接接入使用
  • 面试后复盘被问住的问题可以继续交流
  • 远程问题解决项目启动问题可协助排查
知识星球二维码

扫码进入知识星球

  1. 打开微信,扫描左侧二维码,加入「码力全开」项目实战&技术讲解 知识星球
  2. 查看星球使用指导,获取完整项目讲解资料索引
解锁全部付费内容
🎁优惠