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

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相关技术栈分享 交流 学习

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐