介绍
EggJS提供了Schedule
,用于执行一些定时任务
为了更好地支持集群,EggBornJS对Schedule进行了重构,底层基于bullmq
的repeatable job
,主要有以下三方面优点:
- 支持分布式、集群部署
- 可编译
- 开发简便
下面我们开发一个Schedule
,每隔3秒在控制台打印schedule invoked: Hello World
声明Schedule
src/suite-vendor/test-party/modules/test-party/backend/src/config/config.js
- 1module.exports = appInfo => {
- 2 const config = {};
- 3
- 4 // schedules
- 5 config.schedules = {
- 6 test: {
- 7 bean: 'test',
- 8 repeat: {
- 9 every: 3000,
- 10 },
- 11 disable: true,
- 12 },
- 13 };
- 14
- 15 return config;
- 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
- 1module.exports = app => {
- 2 class Schedule extends app.meta.BeanBase {
- 3
- 4 async execute(context) {
- 5 const job = context.job;
- 6 console.log(`----- Schedule Test: iid=${this.ctx.instance.id}, every=${job.data.jobOptions.repeat.every}, ${new Date()}`);
- 7 }
- 8
- 9 }
- 10
- 11 return Schedule;
- 12};
名称 | 说明 |
---|---|
context.job | bullmq job |
job.data.jobOptions.repeat | Schedule repeat |
注册Bean组件
src/suite-vendor/test-party/modules/test-party/backend/src/beans.js
- 1const scheduleTest = require('./bean/schedule.test.js');
- 2
- 3module.exports = app => {
- 4 const beans = {
- 5 // schedule
- 6 'schedule.test': {
- 7 mode: 'app',
- 8 bean: scheduleTest,
- 9 },
- 10 };
- 11 return beans;
- 12};
注册名称 | 场景 | 所属模块 | global | beanFullName |
---|---|---|---|---|
test | schedule | test-party | false | test-party.schedule.test |
评论: