egg 服务器集群情况下的定时任务执行操作(2种方式)

1 篇文章 0 订阅

第一种做法不是很好  虽然可以避免数据重复处理的问题,但是存在单点故障的问题。

disable:该参数为 false时,定时任务会被启动。

这样的话多台机器上面都会执行,相当于增加了一个开关当执行到改机器主机名和配置主机名相同时

执行定时任务。(如果服务是部署在docker里 就会不太好使了 因为主机名是会变化的)

 

官方也提供了一些解决方案

在 agent.js 中继承 agent.ScheduleStrategy,然后通过 agent.schedule.use() 注册即可

// {app_root}/agent.js
module.exports = function(agent) {
  class CustomStrategy extends agent.ScheduleStrategy {
    start() {
      agent.notify.subscribe('remote_task', data => {
      //随机通知一个 worker 执行任务
        this.sendOne(data);
      });
    }
  }
  agent.schedule.use('custsom', CustomStrategy);
};

然后在schedule目录文件下定义

const Subscription = require('egg').Subscription;
class ClusterTask extends Subscription {
  static get schedule() {
    return {
      type: 'custom',
    };
  }
  async subscribe(data) {
    await data;
  }
}

 

如果写的对你有一点点帮助的话,就随便帮下小明同学 感谢大伙 !!!

一、 左下角点个赞再走吧,给博主一点关怀,可以让更多人看到

二、可以关注我的微信公众号「一起学Node」基于前后端NodeJs相关技术栈分享 交流 学习

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值