场景:有一个这样的服务,后台qutarz任务,并且设置了mysql持久化。
这个服务启动了三个实例,负载均衡。每个实例都在执行自己的后台任务(无论是从api添加还是怎么样,目前这三个实例都有属于自己的后台任务,并且正在执行)
问题是这样的:当正常时,每个实例都在执行自己的后台任务,但是突然之间一个或者多个实例宕机了,再次启动实际时,由于持久化的原因,访问数据库,他会执行不属于自己的后台任务。这个有什么方案能解决?
不能加Redis锁(比如说同一个job执行多个,只是传入的参数不同。)
不能一个实例对应一个服务(这仅仅是三个实例,多个实例的时候单独对应数据库不显示。)
分布式qutarz后台任务
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 精神小伙就是猛 2024-03-15 08:12关注
已找到问题解决方案:
1.在多建立一个表,这是注册后台任务表。当然qutarz也有这个表,但是那个是qutarz自己进行增删改操作的,就不对这个表操作了。
2.每次启动服务实例的时候给每个实例注册一个唯一id。可以在实例docker启动时写进去,或者直接写在配置文件中。部署不同的服务实例时,每个实例id不一致。
3.每次触发器注册时,向新建表存job和指定的id。
4.c#是写特性,java是写注解。写在job前面进行拦截,根据唯一实例id判断是否是自己的后台任务。这样即使服务实例都宕机重启之后也只会执行自己的后台任务,不会因为持久化全部执行。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
- ¥20 关于URL获取的参数,无法执行二选一查询
- ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
- ¥15 marlin编译错误,如何解决?
- ¥15 有偿四位数,节约算法和扫描算法
- ¥15 VUE项目怎么运行,系统打不开
- ¥50 pointpillars等目标检测算法怎么融合注意力机制
- ¥20 Vs code Mac系统 PHP Debug调试环境配置
- ¥60 大一项目课,微信小程序
- ¥15 求视频摘要youtube和ovp数据集