JianghuJS-定时任务
120021、概念
- 什么是定时任务
定时任务指的是预先设定好执行时间,在特定时间或者间隔内执行特定操作或程序的任务。这些任务可以周期性地、定期地、或在特定的时间点触发执行。在软件开发中,定时任务通常用于处理重复性操作、自动化任务和计划任务。
- 定时任务的需求背景
虽然我们通过框架开发的 HTTP Server 是请求响应模型的,但是仍然还会有许多场景需要执行一些定时任务,例如:
- 定时上报应用状态。
- 定时从远程接口更新本地缓存。
- 定时进行文件切割、临时文件删除。
框架提供了一套机制来让定时任务的编写和维护更加优雅。
2、JianghuJS 中的定时任务定义
- 所在目录
所有的定时任务都统一存放在 app/schedule
目录下,每一个文件都是一个独立的定时任务,可以配置定时任务的属性和要执行的方法。
- 定义方式
一个简单的例子,我们定义一个更新远程数据到内存缓存的定时任务,就可以在 app/schedule
目录下创建一个 update_cache.js
文件。
module.exports = {
schedule: {
interval: '1m', // 1 分钟间隔
type: 'all', // 指定所有的 worker 都需要执行
},
async task(ctx) {
const res = await ctx.curl('http://www.api.com/cache', {
dataType: 'json',
});
ctx.app.cache = res.data;
},
};
这个定时任务会在每一个 Worker 进程上每 1 分钟执行一次,将远程数据请求回来挂载到 app.cache
上。
3、编写定时任务
todo:更新远程数据到内存缓存的定时任务示例
在江湖应用程序的启动过程中,以下是应用程序的启动生命周期方法的详细列表(参考项目根目录 app.js
):
configWillLoad
:这个方法会在配置文件即将加载时调用,可以在这个方法中加载一些自定义的配置文件。configDidLoad
:这个方法会在配置文件加载完成后调用,可以在这个方法中对加载好的配置文件进行一些操作。didLoad
:这个方法会在应用程序启动时调用,可以在这个方法中进行一些初始化操作。willReady
:这个方法会在应用程序启动时调用,可以在这个方法中加载一些插件或者其他依赖项。didReady
:这个方法会在应用程序启动时调用,可以在这个方法中进行一些初始化完毕后的操作。serverDidReady
:这个方法会在应用程序启动时调用,可以在这个方法中进行一些服务端启动完毕后的操作。beforeClose
:这个方法会在应用程序关闭时调用,可以在这个方法中进行一些清理操作。