愁死了! 关于分布式定时任务执行编排问题

2022-07-16 21:53:17 +08:00
 weixiaoyun

需求(使用: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 了。请问有大佬遇到过这样的场景吗?
1054 次点击
所在节点    问与答
1 条回复
zhijiansha
2022-07-16 23:44:31 +08:00
借助 MQ ? n 通过 xxljob 定时执行,把需要执行的 m 塞入 MQ ,再消费 MQ 消息。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/866688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX