推送流程图
2024-01-05 14:26:40 0 举报
推送
作者其他创作
大纲/内容
结束
是
推送结果状态设置为等待处理
如果有下一步骤任务,则生成,否则跳过
否
Job调度开始
注:如果是即时考勤推送将不更新PushTaskItem
是否是异步推送
否,根据查询次数计算延迟时间
查询要推送的业务数据
获取任务信息(external_job_taskdata
Ack
是否FirstTask
有推送数据
若存在下一步骤任务,则生成,否则跳过此步骤
重试查询业务数据
推送是否成功
检查上次任务是否完
发送获取处理结果延迟队列消息
查询异步结果
重试时,无论成功还是失败,都会更新EsPushRecord。因为每次推送失败的原因可能不一样,最新的错误原因有助于我们检查并排除问题,更重要的是同时会更新重试次数,若当MQ发生灾难性问题时,EsPushRecord中依然有最新的推送失败情况纪录。
更新external_jobtask_data表EditDate、BusinessData
获取可执行PushTaskItems
推送到第三方平台
如果有下一步骤任务,则生成,否则跳过此步骤
重新发送延迟消息,重复重试逻辑
发送失败推送消息至MQ
推送时采用图1:遍历数据进行推送逻辑
为FirstTask生成PushTaskItem
遍历数据进行推送
MQ延迟消息处理失败推送流程
写入EsPushRecord
图4,说明:因为考勤数据量非常大,同时要求很高的及时性,放弃原通过Job调度方式,改为当产生考勤时主动发送RabbitMQ消息主动通知模式。即时考勤产生时RabbitMQ交互机类型:directqueueName: labor-workerattendance-project-instant-{SysCode}如果消费压力大,通过增加消费者数量增加消费能力。
异步结果查询延迟消息处理流程
所有状态的数据都会纪录到EsPushRecord中,不仅仅是失败状态。同时对同一业务数据只保留最新推送的一次纪录。例如某人因为修改信息,增量推送了N次,这里会纪录它最后一次推送的情况。
是否需要推送
及时考勤推送
是否达到最大查询次数
更新最新状态到EsNewestLog
检查当前要重试的纪录推送状态是否为成功
收到消息
更新PushTaskItem,纪录本次推送的位置
产生考勤时人脸机上传/现场端上传
更新最新推送状态至EsPushRecord
生成RoutingKeys发送Mq消息
发送预警通知邮件
是否推送失败
累加查询次数并发送Mq延迟消息
批量Push推送结果至EsPushRecord
第一次送延迟1小时队列消自息
发送迟队列消息,重试次数+1,延时时间=2小时*次数
发送延迟队列消息,RoutingKey:labor.{SysCode}.getasynchandle.{TaskCode}延迟时间:20S
遍历EsPushTaskTeam任务执行推送任务
是否达到最大重试次数
是否等待处理
有可执行的任务
考勤推送
当收到失败MQ消息时
发送失败推送消息至MQ
记录推送日志ApiLog
推送单位、班组、工人......(除考勤外)
图2,说明:exchange: labor.topic.externalpush.push.retry Type: x-delayed-messageruningkey: labor.{SysCode}.externalpush.push.retry#最大重试次数=3次,队列消息延迟时间,首次为1h,其它为重试次数 X 2h
处理结果是否成功
等待一段时间重新尝试获取处理结果
获取当前考勤需要推送区域
考勤推送通知
0 条评论
下一页