国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Laravel 技巧之 定時(shí)任務(wù)

keithyau / 1336人閱讀

摘要:對(duì)于定時(shí)任務(wù)的基本用法,官網(wǎng)文檔已經(jīng)描述得很詳細(xì)了,這里不再多說(shuō)。這種情況下如果定時(shí)任務(wù)能夠并行執(zhí)行,就不會(huì)有這樣的問(wèn)題。這個(gè)時(shí)候我們希望能夠像隊(duì)列那樣,將定時(shí)任務(wù)分散到多臺(tái)服務(wù)器上。

定時(shí)任務(wù) Scheduled Tasks 是 Laravel 提供的組件之一,稍微上點(diǎn)規(guī)模的項(xiàng)目應(yīng)該都會(huì)用到,比如開(kāi)發(fā)微信應(yīng)用時(shí)通過(guò)定時(shí)任務(wù)去刷新access token,比如每天定時(shí)發(fā)推送提現(xiàn)用戶要記得簽到。對(duì)于定時(shí)任務(wù)的基本用法,官網(wǎng)文檔已經(jīng)描述得很詳細(xì)了,這里不再多說(shuō)。

本文主要是介紹定時(shí)任務(wù)在實(shí)際應(yīng)用中的兩個(gè)小技巧:

1. 多個(gè)任務(wù)并行執(zhí)行

先簡(jiǎn)單介紹一下 Laravel 定時(shí)任務(wù)組件的基本原理:

當(dāng)cli初始化完畢之后,系統(tǒng)會(huì)調(diào)用 AppConsoleKernel::schedule 方法,也就是我們定義定時(shí)任務(wù)列表的地方,這個(gè)方法里每調(diào)用一次 $schedule->command() 就會(huì)生成一個(gè) IlluminateConsoleSchedulingEvent 對(duì)象并保存在 $schedule->events 數(shù)組里。當(dāng)執(zhí)行 php artisan scheduled:run 時(shí),系統(tǒng)會(huì)遍歷 $schedule->events,把當(dāng)前時(shí)間需要執(zhí)行的任務(wù)放在一個(gè)集合中,最后依次 串行執(zhí)行 這些任務(wù)。

這樣做在大多數(shù)情況下是沒(méi)有問(wèn)題的,但有一些特殊的情況,比如在每個(gè)月的第一天要給100W個(gè)用戶發(fā)送郵件,同一批次的定時(shí)任務(wù)必須等到這些郵件全部發(fā)送完畢之后才會(huì)被執(zhí)行,假如這些任務(wù)里有對(duì)執(zhí)行時(shí)間十分敏感的任務(wù),比每5分鐘一次的數(shù)據(jù)快照,就會(huì)導(dǎo)致那個(gè)時(shí)間點(diǎn)數(shù)據(jù)的缺失。

這種情況下如果定時(shí)任務(wù)能夠并行執(zhí)行,就不會(huì)有這樣的問(wèn)題。Laravel 實(shí)際上提供了解決方案,但很奇怪文檔里面并沒(méi)有提到,就是 runInBackground 方法,在定義定時(shí)任務(wù)時(shí) $schedule->command("foo:bar")->everyMinutes()->runInBackground(); 就可以了。

2. 負(fù)載均衡

隨著業(yè)務(wù)邏輯的增多,定時(shí)任務(wù)也會(huì)越來(lái)越多,定時(shí)任務(wù)服務(wù)器的負(fù)載也會(huì)越來(lái)越高,甚至導(dǎo)致任務(wù)執(zhí)行緩慢,然而我們卻只能在一臺(tái)服務(wù)器上設(shè)置定時(shí)任務(wù),如果在多臺(tái)服務(wù)器上同時(shí)配置了定時(shí)任務(wù),還會(huì)導(dǎo)致定時(shí)任務(wù)的重復(fù)執(zhí)行。這個(gè)時(shí)候我們希望能夠像隊(duì)列那樣,將定時(shí)任務(wù)分散到多臺(tái)服務(wù)器上。

截止 v5.4.15,Laravel 還沒(méi)有提供內(nèi)置方案來(lái)解決這個(gè)問(wèn)題,但只需要簡(jiǎn)單的改造就可以實(shí)現(xiàn)我們需要的效果。首先我們把將每個(gè)定時(shí)任務(wù)里 handle 方法提取出來(lái)創(chuàng)建一個(gè)新的Job并繼承 ShouldQueue,然后在定時(shí)任務(wù)的 handle 里直接 dispatch 對(duì)應(yīng)的Job即可,這樣原本的業(yè)務(wù)邏輯就會(huì)被隊(duì)列處理掉,當(dāng)系統(tǒng)有多臺(tái)服務(wù)器在處理隊(duì)列時(shí),也就實(shí)現(xiàn)了我們需要的負(fù)載均衡。

但是這樣畢竟還是麻煩,每個(gè)定時(shí)任務(wù)都要?jiǎng)?chuàng)建一個(gè)Command和一個(gè)Job,太費(fèi)勁,于是我提交了一個(gè) Proposal ,目前已經(jīng)實(shí)現(xiàn)并且merge入5.4分支,相信下個(gè)版本大家就能用上了。用法也很簡(jiǎn)單,只需要?jiǎng)?chuàng)建一個(gè)繼承 ShouldQueue的Job,然后在AppConsoleKernel::schedule 方法里定義

$schedule->job(new FooBarJob())->everyMinutes();

就可以了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22487.html

相關(guān)文章

  • 高性能千萬(wàn)級(jí)定時(shí)任務(wù)管理服務(wù)forsun laravel插件使用詳解

    摘要:高性能高精度定時(shí)服務(wù),輕松管理千萬(wàn)級(jí)定時(shí)任務(wù)。支持任務(wù)到期觸發(fā)和。支持創(chuàng)建延時(shí)任務(wù)和定時(shí)到期任務(wù),和原生保持相同接口,輕松使用。不支持任務(wù)輸出任務(wù)鉤子及維護(hù)模式。是不指定任務(wù)名時(shí)自動(dòng)生成,每個(gè)任務(wù)名必須唯一,相同任務(wù)名重復(fù)定義將會(huì)自動(dòng)覆蓋。 Forsun高性能高精度定時(shí)服務(wù),輕松管理千萬(wàn)級(jí)定時(shí)任務(wù)。 定時(shí)服務(wù)項(xiàng)目地址:https://github.com/snower/forsun l...

    Muninn 評(píng)論0 收藏0
  • 創(chuàng)業(yè)初期數(shù)據(jù)庫(kù)云備份laravel解決方案

    摘要:在中注冊(cè)發(fā)布之后,我們會(huì)產(chǎn)生一個(gè)監(jiān)聽(tīng)器,文件已經(jīng)存儲(chǔ)在本地,獲取該文件信息將文件上傳至七牛云存入數(shù)據(jù)庫(kù)上面的部分代碼沒(méi)寫(xiě),大家可以去自己去試下,加深對(duì)七牛云及的理解,完全可以達(dá)到目的。 最近項(xiàng)目用戶徒增,購(gòu)買(mǎi)的服務(wù)器還是和公司另外一個(gè)項(xiàng)目共用的同一臺(tái)服務(wù)器,想著要是服務(wù)器崩了,還沒(méi)個(gè)容災(zāi)方案,萬(wàn)一。。。不得被用戶整死 選用方案 laravel-backup 配合laravel的任務(wù)調(diào)...

    2bdenny 評(píng)論0 收藏0
  • Laravel 5.7 最佳實(shí)踐和開(kāi)發(fā)技巧分享

    摘要:當(dāng)查詢數(shù)據(jù)時(shí),本地范圍允許我們創(chuàng)建自己的查詢構(gòu)造器鏈?zhǔn)椒椒ā_@樣便會(huì)知道這是一個(gè)本地范圍并且可以在查詢構(gòu)造器中使用。某些查詢構(gòu)造器不可用或者說(shuō)可用但是方法名不同,關(guān)于這些請(qǐng)查閱所有集合的方法。 showImg(https://segmentfault.com/img/remote/1460000017877956?w=800&h=267); Laravel 因可編寫(xiě)出干凈,可用可調(diào)試的...

    ninefive 評(píng)論0 收藏0
  • Laravel 執(zhí)行用戶自定義的定時(shí)任務(wù)

    摘要:原文來(lái)自問(wèn)題在中,如果我們想使用定時(shí)任務(wù)的話,對(duì)應(yīng)我們開(kāi)發(fā)人員來(lái)說(shuō)非常簡(jiǎn)單,只需要參照官網(wǎng)的定時(shí)任務(wù)文檔基本就可以實(shí)現(xiàn)了。總結(jié)以上就簡(jiǎn)單實(shí)現(xiàn)了執(zhí)行用戶自定義定時(shí)任務(wù)的需求。 原文來(lái)自 https://www.codecasts.com/blo... 問(wèn)題 在 Laravel 中,如果我們想使用定時(shí)任務(wù)的話,對(duì)應(yīng)我們開(kāi)發(fā)人員來(lái)說(shuō)非常簡(jiǎn)單,只需要參照官網(wǎng)的定時(shí)任務(wù)文檔基本就可以實(shí)現(xiàn)了。 然...

    izhuhaodev 評(píng)論0 收藏0
  • 個(gè)人整理, 閱讀過(guò)的好文章 (每天隨時(shí)更新)

    摘要:大家有好的文章可以在評(píng)論下面分享出來(lái)共同進(jìn)步本文鏈接數(shù)組使用之道程序員進(jìn)階學(xué)習(xí)書(shū)籍參考指南教你在不使用框架的情況下也能寫(xiě)出現(xiàn)代化代碼巧用數(shù)組函數(shù)框架中間件實(shí)現(xiàn)沒(méi)錯(cuò),這就是面向?qū)ο缶幊淘O(shè)計(jì)模式需要遵循的個(gè)基本原則令人困惑的在中使用協(xié)程實(shí)現(xiàn)多任 大家有好的文章,可以在評(píng)論下面分享出來(lái), 共同進(jìn)步! 本文github鏈接 php PHP 數(shù)組使用之道 PHP程序員進(jìn)階學(xué)習(xí)書(shū)籍參考指南 教你...

    Chiclaim 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<