B站免费视频:CabloyJS全栈框架:从入门到精通:032 Schedule定时任务

介绍

EggJS提供了Schedule,用于执行一些定时任务

为了更好地支持集群,EggBornJS对Schedule进行了重构,底层基于bullmqrepeatable job,主要有以下三方面优点:

  1. 支持分布式、集群部署
  2. 可编译
  3. 开发简便

下面我们开发一个Schedule,每隔3秒在控制台打印schedule invoked: Hello World

声明Schedule

src/suite-vendor/test-party/modules/test-party/backend/src/config/config.js

  1. 1module.exports = appInfo => {
  2. 2 const config = {};
  3. 3
  4. 4 // schedules
  5. 5 config.schedules = {
  6. 6 test: {
  7. 7 bean: 'test',
  8. 8 repeat: {
  9. 9 every: 3000,
  10. 10 },
  11. 11 disable: true,
  12. 12 },
  13. 13 };
  14. 14
  15. 15 return config;
  16. 16};
名称 说明
test Schedule名称
bean Schedule所对应的Bean组件名称
repeat 定时间隔,支持cron,请参见:repeatable job
disable 是否禁用Schedule

定义Bean组件

src/suite-vendor/test-party/modules/test-party/backend/src/bean/schedule.test.js

  1. 1module.exports = app => {
  2. 2 class Schedule extends app.meta.BeanBase {
  3. 3
  4. 4 async execute(context) {
  5. 5 const job = context.job;
  6. 6 console.log(`----- Schedule Test: iid=${this.ctx.instance.id}, every=${job.data.jobOptions.repeat.every}, ${new Date()}`);
  7. 7 }
  8. 8
  9. 9 }
  10. 10
  11. 11 return Schedule;
  12. 12};
名称 说明
context.job bullmq job
job.data.jobOptions.repeat Schedule repeat

注册Bean组件

src/suite-vendor/test-party/modules/test-party/backend/src/beans.js

  1. 1const scheduleTest = require('./bean/schedule.test.js');
  2. 2
  3. 3module.exports = app => {
  4. 4 const beans = {
  5. 5 // schedule
  6. 6 'schedule.test': {
  7. 7 mode: 'app',
  8. 8 bean: scheduleTest,
  9. 9 },
  10. 10 };
  11. 11 return beans;
  12. 12};
注册名称 场景 所属模块 global beanFullName
test schedule test-party false test-party.schedule.test