V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yisheyuanzhang
V2EX  ›  Java

请教大佬们,微服务中定时任务的代码应该如何设计

  •  
  •   yisheyuanzhang · 2021-09-16 22:20:01 +08:00 · 2619 次点击
    这是一个创建于 1145 天前的主题,其中的信息可能已经有所发展或是发生改变。

    单体项目时,只分了两个项目

    1. web 端,响应前端用户的请求
    2. 定时调度执行器,配合 xxl-job 使用

    拆分为微服务后,定时任务执行的相关代码如何设计比较好? 我自己能想到的

    1. 用户请求的业务代码和定时任务代码写到一个服务,通过部署时配置文件和 Nacos 命名空间来控制部分服务响应用户请求,部分服务注册到 xxljob
    2. 业务代码和定时任务代码分别写两个服务,由于两个服务肯定有公共代码,还得抽一个公共业务模块
    8 条回复    2021-09-18 00:05:16 +08:00
    lumious
        1
    lumious  
       2021-09-17 00:56:12 +08:00
    参与的一个项目做法是单独分一个负责定时器的服务,注册到 xxl-job 。由定时服务通过 feign 或者 dubbo 去调用业务服务
    namelosw
        2
    namelosw  
       2021-09-17 01:05:22 +08:00
    业务和任务经常有业务相同的地方,所以放在一起比较好。
    xuanbg
        3
    xuanbg  
       2021-09-17 07:42:19 +08:00
    别忘了加分布式锁
    xuanbg
        4
    xuanbg  
       2021-09-17 07:44:59 +08:00
    我的做法是实现一个任务调度器,调度器只管到点调用对应服务接口。
    lasuar
        5
    lasuar  
       2021-09-17 10:10:42 +08:00
    有一个定时器服务,只运行一个实例。业务代码该在哪在哪,不要耦合。通过 rpc 就行
    yisheyuanzhang
        6
    yisheyuanzhang  
    OP
       2021-09-17 10:35:44 +08:00
    这样的话,同一个服务可能会被 web 访问和定时任务同时调用。 如果定时任务执行流程比较长的话。 服务更新时很容易中断。。
    fengpan567
        7
    fengpan567  
       2021-09-17 17:50:13 +08:00
    每个服务一个定时任务子工程,然后注册到 xxl-job 去调度
    FrankAdler
        8
    FrankAdler  
       2021-09-18 00:05:16 +08:00
    job 独立,抽公共模块少不了的,项目再大点业务再复杂点会更明显,需要共享或者公用的常量设置太多了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3431 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:39 · PVG 19:39 · LAX 03:39 · JFK 06:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.