定时任务

所有的定时任务都统一存放在 app/schedule 目录下,每一个文件都是一个独立的定时任务,可以配置定时任务的属性和要执行的方法。

一个简单的示例:

module.exports = {
  schedule: {
    interval: '1s', // 1s 间隔
    type: 'all', // 指定所有的 worker 都需要执行
  },
  async task(ctx) {
    console.log(new Date());
  },
};

以上, 定时任务会1s打印一次当前时间。

完整定义

上面简单定义了一个定时任务, 完整的定义如下:

const Subscription = require('egg').Subscription;
class UpdateCache extends Subscription {
  // 通过 schedule 属性来设置定时任务的执行间隔等配置
  static get schedule() {
    return {
      interval: '1m', // 1s 间隔
      type: 'all', // 指定所有的 worker 都需要执行
      immediate: true,
    };
  }
  // subscribe 是真正定时任务执行时被运行的函数
  async subscribe() {
    const res = await this.ctx.curl('http://www.api.com/test', {
      dataType: 'json',
    });
    console.log(res);
  }
}
module.exports = UpdateCache;
  • task 或 subscribe 同时支持 generator function 和 async function。
  • task 的入参为 ctx,匿名的 Context 实例,可以通过它调用 service 等。

参数

定时方式

定时任务可以指定 interval 或者 cron 两种不同的定时方式。

  • interval: 传入字符串, 支持 ms, s, m, h
  • crom: 参考 cron-parser

类型

框架提供的定时任务默认支持两种类型,worker 和 all。worker 和 all 都支持上面的两种定时方式,只是当到执行时机时,会执行定时任务的 worker 不同:

  • worker 类型:每台机器上只有一个 worker 会执行这个定时任务,每次执行定时任务的 worker 的选择是随机的。
  • all 类型:每台机器上的每个 worker 都会执行这个定时任务。

其他

除了刚才介绍到的几个参数之外,定时任务还支持这些参数:

  • cronOptions: 配置 cron 的时区等,参见 cron-parser 文档
  • immediate:配置了该参数为 true 时,这个定时任务会在应用启动并 ready 后立刻执行一次这个定时任务。
  • disable:配置该参数为 true 时,这个定时任务不会被启动。
  • env:数组,仅在指定的环境下才启动该定时任务。

更多详情参见: 定时任务

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress