精神小伙就是猛 2024-03-14 18:05 采纳率: 100%
浏览 17
已结题

分布式qutarz后台任务

场景:有一个这样的服务,后台qutarz任务,并且设置了mysql持久化。
这个服务启动了三个实例,负载均衡。每个实例都在执行自己的后台任务(无论是从api添加还是怎么样,目前这三个实例都有属于自己的后台任务,并且正在执行)
问题是这样的:当正常时,每个实例都在执行自己的后台任务,但是突然之间一个或者多个实例宕机了,再次启动实际时,由于持久化的原因,访问数据库,他会执行不属于自己的后台任务。这个有什么方案能解决?
不能加Redis锁(比如说同一个job执行多个,只是传入的参数不同。)
不能一个实例对应一个服务(这仅仅是三个实例,多个实例的时候单独对应数据库不显示。)

  • 写回答

4条回答 默认 最新

  • 精神小伙就是猛 2024-03-15 08:12
    关注

    已找到问题解决方案:
    1.在多建立一个表,这是注册后台任务表。当然qutarz也有这个表,但是那个是qutarz自己进行增删改操作的,就不对这个表操作了。
    2.每次启动服务实例的时候给每个实例注册一个唯一id。可以在实例docker启动时写进去,或者直接写在配置文件中。部署不同的服务实例时,每个实例id不一致。
    3.每次触发器注册时,向新建表存job和指定的id。
    4.c#是写特性,java是写注解。写在job前面进行拦截,根据唯一实例id判断是否是自己的后台任务。这样即使服务实例都宕机重启之后也只会执行自己的后台任务,不会因为持久化全部执行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集