消息记录的详细过程解析
在上一章节中,详细介绍了消息记录能解决哪些问题,以及相关的表设计。而本章节会详细讲解消息记录的执行过程
发送消息流程
首先就是来到经典责任链模式中的最后一个节点,也就是 升级维度节点
处理逻辑要点:
-
先做维度升级计算:若已到顶(
PARENT_VIDEO_TYPE且YEAR),停止;否则生成“下一跳维度参数”。 -
生成消息发送记录(落库,状态为未发送),并同时写入“视频业务维度发送记录”。
-
调用升级消息发送器,将消息发往 Kafka。
-
根据发送后的状态更新消息发送记录,包括:正常、异常
org.javaup.chain.impl.UpgradeDimensionDataChainHandler#handler
@Override
protected void handler(TotalParamTransfers totalParamTransfers) {
//执行维度升级
ParamTransfers newParamTransfers = doUpgradeDimension(totalParamTransfers);
//如果newParamTransfers为空,说明维度已经升级到最高了,不需要再发型消息了
if (Objects.isNull(newParamTransfers)) {
return;
}
totalParamTransfers.setParamTransfers(newParamTransfers);
MessageProducerRecord messageProducerRecord = messageProducerRecordService.insertMessageProducerRecord(totalParamTransfers);
UpDimensionDomain upDimensionDomain = upgradeDimensionHandler.upgradeDimension(messageProducerRecord.getId(),
messageProducerRecord.getMessageId(),totalParamTransfers);
if (Objects.nonNull(upDimensionDomain.getDockDataCenterFrameException())) {
throw upDimensionDomain.getDockDataCenterFrameException();
}
}
先做维度升级计算
public ParamTransfers doUpgradeDimension(TotalParamTransfers totalParamTransfers){
//视频维度
VideoDimensionType videoDimensionType = totalParamTransfers.getParamTransfers().getVideoDimensionType();
//时间类型
DateType dateType = totalParamTransfers.getParamTransfers().getRequestTime().getDateType();
//如果视频维度是父级的视频分类,并且时间维度是年维度,那么就不需要再进行升级了
if (videoDimensionType == VideoDimensionType.PARENT_VIDEO_TYPE && dateType == DateType.YEAR) {
log.info("一次的所有维度采集完成, 规则id:{}, 采集日期:{}", totalParamTransfers.getParamTransfers().getRuleId(),
totalParamTransfers.getParamTransfers().getRequestTime().getGatherDate());
return null;
}
//维度的升级
ParamTransfers newParamTransfers = upgradeDimensionParam(totalParamTransfers.getParamTransfers());
if (Objects.isNull(newParamTransfers)) {
return null;
}
log.info("维度升级执行,升级前的时间维度:{}, 升级前的视频维度:{}, 升级后的时间维度:{}, 升级后的视频维度:{}",
dateType.getMsg(), videoDimensionType.getMsg(),
newParamTransfers.getRequestTime().getDateType().getMsg(),
newParamTransfers.getVideoDimensionType().getMsg());
return newParamTransfers;
}
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的550+详细文档
- 讲解视频:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
