V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
weixiaoyun
V2EX  ›  问与答

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

  •  1
     
  •   weixiaoyun · 2022-07-16 21:53:17 +08:00 · 1199 次点击
    这是一个创建于 859 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求(使用: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 条回复    2022-07-16 23:44:31 +08:00
    zhijiansha
        1
    zhijiansha  
       2022-07-16 23:44:31 +08:00 via iPhone
    借助 MQ ? n 通过 xxljob 定时执行,把需要执行的 m 塞入 MQ ,再消费 MQ 消息。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1103 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:48 · PVG 02:48 · LAX 10:48 · JFK 13:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.