加载中...
  • egg定时任务

    有的时候我们希望应用能够每隔一段时间,自动做一些操作。比如,自动获取了第三方的数据更新,用于调整自己的业务;再比如一些更新频率低但查询频率高的数据,我们可以将数据查询到内存中,并设置每隔多久检查一次是否需要更新内存中缓存好的数据。这些操作都需要使用到定时任务;这个时候就可以利用egg的schedule功能了

    编写一个定时任务

    Egg 约定了定时任务文件统一存放于 app/schedule/ 位置,在 Egg 项目加载的过程中,会自动解析该目录下的文件,并以文件返回的对象来控制如何执行定时任务:
    如:目录结构
    image.png

    代码示例 schedule/update_cache.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    const Subscription = require('egg').Subscription;

    class UpdateCache extends Subscription {
    // 通过 schedule 属性来设置定时任务的执行间隔等配置
    static get schedule() {
    return {
    interval: '5s', // 60s间隔 支持interval和corn的定时方式
    type: 'all', // all=所有的 worker 都需要执行 worker=只有一个worker会执行
    };
    }

    // subscribe 是真正定时任务执行时被运行的函数
    async subscribe() {
    // const res = await this.ctx.curl('http://mock-api.com/RKDx59Ka.mock/user', {
    // dataType: 'json',
    // });
    const count = 'ok'
    console.log(3333333333333)
    // console.log(res)

    this.ctx.app.cache = count;
    }
    }

    module.exports = UpdateCache;

    这只是个简单示例 ,可以在控制台打印查看

    属性解析
    subscribe() 函数表示在定时任务执行时,真正执行的代码段。而属性 schedule 则相当于是为当前的定时器指定的配置:

    属性 类型 描述
    nterval number 定时任务每隔 n 毫秒执行一次
    nterval string 定时任务每隔 n 毫秒执行一次 (会将 ms 方式转换成毫秒,如 5m 代表 5分钟 )
    cron string 以 cron 表达式 来指定定时时机,如 0 0 */3 * * * 代表每隔3小时执行一次
    type string all:代表每一个worker都会执行worker:代表会随机选一个worker来执行此次定时任务
    immediate boolean 配置了该参数为 true 时,这个定时任务会在应用启动并 ready 后立刻执行一次这个定时任务。
    disable boolean 配置该参数为 true 时,这个定时任务不会被启动。
    env Array 数组,仅在指定的环境下才启动该定时任务。

    官网地址

    https://eggjs.org/zh-cn/basics/schedule.html

    上一篇:
    求解 egg.js框架怎么访问根目录文件
    下一篇:
    react CSS Modules 基本用法
    本文目录
    本文目录