Egg 框架簡述 (六):定時任務(wù)

  1. 簡單的骨架認(rèn)知
  2. 插件使用(Plugins)
  3. 持久層方案(egg-sequelize)
  4. Worker 和 高效負(fù)載均衡
  5. Agent 代理角色
  6. 定時任務(wù)

筆者的其他文章推薦: 《JS 函數(shù)式編程思維簡述》

前言

? ? ? ?就像上一章舉得例子,有的時候我們希望應(yīng)用能夠每隔一段時間育瓜,自動做一些操作葫隙。比如,自動獲取了第三方的數(shù)據(jù)更新爆雹,用于調(diào)整自己的業(yè)務(wù)停蕉;再比如一些更新頻率低但查詢頻率高的數(shù)據(jù),我們可以將數(shù)據(jù)查詢到內(nèi)存中钙态,并設(shè)置每隔多久檢查一次是否需要更新內(nèi)存中緩存好的數(shù)據(jù)。這些操作都需要使用到定時任務(wù)菇晃;

圓形定時器

編寫一個定時任務(wù)

? ? ? ?Egg 約定了定時任務(wù)文件統(tǒng)一存放于 app/schedule/ 位置册倒,在 Egg 項目加載的過程中,會自動解析該目錄下的文件磺送,并以文件返回的對象來控制如何執(zhí)行定時任務(wù):

const Subscription = require('egg').Subscription;

class UpdateCache extends Subscription {
    // 通過 schedule 屬性來設(shè)置定時任務(wù)的執(zhí)行間隔等配置
    static get schedule() {
        return {
            // interval: '1m', // 1 分鐘間隔
            cron: '*/15 * * * * *', // 也可以通過 cron 表達(dá)式來構(gòu)建時間間隔
            type: 'all', // 指定所有的 worker 都需要執(zhí)行
        };
    }

    // subscribe 是真正定時任務(wù)執(zhí)行時被運行的函數(shù)
    async subscribe() {
        const res = await this.ctx.curl('http://www.api.com/cache', {
            dataType: 'json',
        });
        this.ctx.app.cache = res.data;
    }
}

export default UpdateCache;

屬性解析

? ? ? ?subscribe() 函數(shù)表示在定時任務(wù)執(zhí)行時驻子,真正執(zhí)行的代碼段。而屬性 schedule 則相當(dāng)于是為當(dāng)前的定時器指定的配置:

屬性 類型 描述
interval number 定時任務(wù)每隔 n 毫秒執(zhí)行一次
- string 定時任務(wù)每隔 n 毫秒執(zhí)行一次 (會將 ms 方式轉(zhuǎn)換成毫秒,如 5m 代表 5分鐘 )
cron string cron 表達(dá)式 來指定定時時機估灿,如 0 0 */3 * * * 代表每隔3小時執(zhí)行一次
cronOptions object 配置 cron 的時區(qū)等崇呵,參見 cron-parser 文檔
type string all:代表每一個worker都會執(zhí)行
worker:代表會隨機選一個worker來執(zhí)行此次定時任務(wù)
immediate boolean 配置了該參數(shù)為 true 時,這個定時任務(wù)會在應(yīng)用啟動并 ready 后立刻執(zhí)行一次這個定時任務(wù)馅袁。
disable boolean 配置該參數(shù)為 true 時域慷,這個定時任務(wù)不會被啟動。
env Array 數(shù)組汗销,僅在指定的環(huán)境下才啟動該定時任務(wù)犹褒。

項目結(jié)構(gòu)

// 這是一個 egg 項目的目錄結(jié)構(gòu)
├─ app
│  ├─ controller
│  │   ├─ pokemon.ts
│  │   └─ home.ts
│  ├─ service
│  │   ├─ pokemon.ts
│  │   └─ home.ts
│  ├─ model
│  │   ├─ pokemon.ts
│  │   └─ user.ts
│  ├─ middleware
│  │   └─ xtoken.ts
│  ├─ schedule
│  │   └─ somerefresh.ts
│  └─ router.ts
├─ config
│  ├─ config.default.ts
│  ├─ config.prod.ts
│  ├─ config.local.ts
│  └─ plugin.ts
├─ agent.ts
├─ app.ts
│
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弛针,隨后出現(xiàn)的幾起案子叠骑,更是在濱河造成了極大的恐慌,老刑警劉巖削茁,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宙枷,死亡現(xiàn)場離奇詭異掉房,居然都是意外死亡,警方通過查閱死者的電腦和手機慰丛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門卓囚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人璧帝,你說我怎么就攤上這事捍岳。” “怎么了睬隶?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵锣夹,是天一觀的道長。 經(jīng)常有香客問我苏潜,道長银萍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任恤左,我火速辦了婚禮贴唇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飞袋。我一直安慰自己戳气,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布巧鸭。 她就那樣靜靜地躺著瓶您,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纲仍。 梳的紋絲不亂的頭發(fā)上呀袱,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音郑叠,去河邊找鬼夜赵。 笑死,一個胖子當(dāng)著我的面吹牛乡革,可吹牛的內(nèi)容都是我干的寇僧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼署拟,長吁一口氣:“原來是場噩夢啊……” “哼婉宰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起推穷,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤心包,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馒铃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟹腾,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡痕惋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娃殖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片值戳。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炉爆,靈堂內(nèi)的尸體忽然破棺而出堕虹,到底是詐尸還是另有隱情,我是刑警寧澤芬首,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布赴捞,位于F島的核電站,受9級特大地震影響郁稍,放射性物質(zhì)發(fā)生泄漏赦政。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一耀怜、第九天 我趴在偏房一處隱蔽的房頂上張望恢着。 院中可真熱鬧,春花似錦财破、人聲如沸掰派。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碗淌。三九已至,卻和暖如春抖锥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碎罚。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工磅废, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荆烈。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓拯勉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親憔购。 傳聞我的和親對象是個殘疾皇子宫峦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344