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

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

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;
  }
}

猜你喜欢

转载自blog.csdn.net/qq_24884955/article/details/82856230
egg