需求(使用:java 、xxl ):
任务表中有 200w 数据,需要先通过定时任务(每天执行一次,该表的数据每天都会全量更新)计算其中的一部分数据 n (大概 150w 左右),完后才能执行剩余的 m (大概 50w )。
问题:
不能通过 n,m 中字段区分做排序执行,因为执行计算逻辑是在分布式集群加多线程环境,不能保证先后顺序。问题是通过定时任务怎么判断 n 执行完了才能再执行 m 呢?
目前方案:
通过两个定时任务分别执行 n,m 。通过 xxl 定时任务发起调用 A 服务。查询任务表以每页 500 条获取任务表中 n 的数据的总页数 x ,然后将 x 缓存到 redis 。接下来 A 会将查询出的 500 条数据调用 B 服务去多线程执行。每当 B 执行完 500 条后在 try ,finaly 中会将 x 做减一的操作,直到 x 减到 0 ,通过另一个定时任务执行 m(提前会判断 x 是否为 0)。这样会有一个问题:如果任务执行中没有减到 0 ,那第二个定时任务就无法执行 m 了。请问有大佬遇到过这样的场景吗?
1
zhijiansha 2022-07-16 23:44:31 +08:00 via iPhone
借助 MQ ? n 通过 xxljob 定时执行,把需要执行的 m 塞入 MQ ,再消费 MQ 消息。
|