跳到主要内容

采集数据的任务-处理规则业务逻辑

本章节继续上一章节的讲解,在上一章中讲到了任务的处理,根据规则id和时间查询维度信息逻辑 的执行

org.javaup.job.DataJob#job

public void job(Long ruleId){
//删除消息记录
proxyDataJob.deleteToDayMessageRecord();
//消息的父级链路id
long messageParentTraceId = uidGenerator.getUid();
Date yesterdayDate = DateUtils.addDay(DateUtils.now(), -1);
//根据时间维度来创建出开始和结束时间
RequestTime requestTime = DateTimeFunc.createRequestTime(DateType.DAY, yesterdayDate);
//根据规则id和时间查询维度信息
//DimensionTransfers结构:视频id集合、视频分类id,父级的视频分类id
List<DimensionTransfers> dimensionTransfers = dimensionHandler.handleDimensionData(ruleId, requestTime);
for (DimensionTransfers dimensionTransfer : dimensionTransfers) {
//构建参数信息
ParamTransfers paramTransfers = new ParamTransfers();
//消息的父级链路id
paramTransfers.setMessageParentTraceId(messageParentTraceId);
//消息的链路id
paramTransfers.setMessageTraceId(uidGenerator.getUid());
paramTransfers.setRuleId(ruleId);
//采集的类型
paramTransfers.setRuleType(RuleType.GATHER);
//视频维度是videoId
paramTransfers.setVideoDimensionType(VideoDimensionType.VIDEO);
paramTransfers.setDimensionTransfers(dimensionTransfer);
//请求时间
paramTransfers.setRequestTime(requestTime);
paramTransfers.setCollectType(CollectType.SQL);
// 处理规则业务逻辑
ruleHandler.handle(paramTransfers);
}
}

那么继续分析获取到维度信息后的执行过程,也就是循环dimensionTransfers的过程

先不关乎消息记录的相关参数,只看和业务有关的,分别设置了以下参数:

paramTransfers.setRuleId(ruleId);
//采集的类型
paramTransfers.setRuleType(RuleType.GATHER);
//视频维度是videoId
paramTransfers.setVideoDimensionType(VideoDimensionType.VIDEO);
paramTransfers.setDimensionTransfers(dimensionTransfer);
//请求时间
paramTransfers.setRequestTime(requestTime);
paramTransfers.setCollectType(CollectType.SQL);

paramTransfers.setDimensionTransfers(dimensionTransfer) 这行将维度数据设置到了paramTransfers参数中,到此paramTransfers有了维度数据、时间数据了,可以看到paramTransfers的结构:

@Data
public class ParamTransfers {

private Long ruleId;

private RuleType ruleType;

private VideoDimensionType videoDimensionType;

private DimensionTransfers dimensionTransfers;

private RequestTime requestTime;

private CollectType collectType;
}

接下来就是真正处理规则业务逻辑了,也就是执行ruleHandler.handle(paramTransfers)

处理规则业务逻辑

org.javaup.handler.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);
}

根据规则id查询指标信息

List<Metric> metricList = metricService.selectByRuleId(paramTransfers.getRuleId());
public List<Metric> selectByRuleId(Long ruleId) {
LambdaQueryWrapper<Metric> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Metric::getRuleId, ruleId);
return metricMapper.selectList(wrapper);
}

这里的流程很简单,就是根据规则id从指标表中查询所有的此规则下的指标数据了

组装参数

TotalParamTransfers totalParamTransfers = new TotalParamTransfers(metricList, paramTransfers, null);

查询到了指标数据metricList后,设置到totalParamTransfers参数中,到此totalParamTransfers中的参数就组装完毕了,可以看下totalParamTransfers的结构

@AllArgsConstructor
@Data
public class TotalParamTransfers {

private List<Metric> metricList;

private ParamTransfers paramTransfers;

//省略...
}

数据处理的策略

//根据规则的类型(采集 或者 查询)获取对应的数据处理器
DataHandler dataHandler =
dataHandlerContext.getDataHandler(paramTransfers.getRuleType().getCode());

这行是根据规则类型获取对应的数据处理器,这里还是个策略模式

数据处理器接口

public interface DataHandler {

/**
* 处理业务逻辑
* @param totalParamTransfers 总参数传输对象
* @return 规则处理输出对象
* */
RuleHandleOutput dataHandle(TotalParamTransfers totalParamTransfers);

/**
* 获取规则类型(采集 或者 查询)
* @return 规则类型
* */
Integer getRuleType();
}

DataHandler定义了数据执行的方法dataHandle,和数据处理的策略getRuleType

付费内容提示

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

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

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. 查看星球使用指导,获取完整项目讲解资料索引
解锁全部付费内容
🎁优惠