egg定時任務(wù)
需求
近期接到一個任務(wù),使用egg每日定時刷新數(shù)據(jù)庫的內(nèi)容滚躯,那么如何去編寫一個定時任務(wù)呢雏门?
調(diào)研
訪問egg官網(wǎng)的教程,我們可以看到其存在定時任務(wù)這一項(https://eggjs.org/zh-cn/basics/schedule.html
)掸掏。
使用
在官網(wǎng)的教程中茁影,我們可以很簡單的了解到egg對于定時任務(wù)封裝后的使用簡便∩シ铮可以說是相當easy了募闲。
主要有以下2種方式的定時方式:
- interval:通過 schedule.interval 參數(shù)來配置定時任務(wù)的執(zhí)行時機,定時任務(wù)將會每間隔指定的時間執(zhí)行一次愿待;
- cron: 通過 schedule.cron 參數(shù)來配置定時任務(wù)的執(zhí)行時機浩螺,定時任務(wù)將會按照 cron 表達式在特定的時間點執(zhí)行。
兩種方式都是相當簡單的仍侥,這里我們先來看下代碼邏輯:
module.exports = {
schedule: {
cron: '0 0 2 * * ?', // 每日2點執(zhí)行
// interval: '1m', // 1 分鐘間隔
type: 'all', // 指定所有的 worker 都需要執(zhí)行
},
async task(ctx) {
const { exportRemoteService } = ctx.service;
console.log("執(zhí)行exportRemoteService.export()要出, 時間點: " + new Date().getTime());
exportRemoteService.export();
},
};
注意:
框架提供的定時任務(wù)默認支持兩種類型,worker 和 all农渊。worker 和 all 都支持上面的兩種定時方式患蹂,只是當?shù)綀?zhí)行時機時,會執(zhí)行定時任務(wù)的 worker 不同:
-
worker
類型:每臺機器上只有一個 worker 會執(zhí)行這個定時任務(wù)砸紊,每次執(zhí)行定時任務(wù)的 worker 的選擇是隨機的传于。 -
all
類型:每臺機器上的每個 worker 都會執(zhí)行這個定時任務(wù)。