laravel 隊(duì)列

laravel隊(duì)列文檔

1.概念理解

連接(connections ):config/queue.php中有一個(gè)connections配置選項(xiàng)龙巨,你可以選擇redis傲绣、數(shù)據(jù)庫(kù)、 Amazon SQS阳液,Beanstalk等作為隊(duì)列的驅(qū)動(dòng)余赢。

隊(duì)列(queue):在一個(gè)連接中可以存在多個(gè)隊(duì)列,每個(gè)隊(duì)列處理各種的任務(wù)愕难,隊(duì)列名稱可以根據(jù)需求自己定義早龟。

2.修改配置文件

修改.env文件對(duì)應(yīng)的配置

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

3.job文件

  • 首先要生成job文件,命令:

    php artisan make:job Logs
    

    這樣Logs.php文件就會(huì)被默認(rèn)聲稱在app/Jobs目錄下猫缭,你可以吧這個(gè)文件移到你的模塊下面(記著要改命名空間!)

  • 在構(gòu)造方法中你可以設(shè)置連接葱弟、隊(duì)列、嘗試次數(shù)猜丹、超時(shí)時(shí)間等芝加。

public function __construct(EntityLog $logEntity)
    {
        $this->connection = 'redis';//使用的連接(該連接的意思是你存入數(shù)據(jù)時(shí)使用的連接,運(yùn)行隊(duì)列的時(shí)候還需要設(shè)置連接射窒,后面會(huì)提到)
        $this->queue = 'logs';      //使用的隊(duì)列(該隊(duì)列的意思是你存入數(shù)據(jù)時(shí)使用的隊(duì)列藏杖,運(yùn)行隊(duì)列的時(shí)候還需要設(shè)置隊(duì)列,后面會(huì)提到)
        $this->tries = 3;           //任務(wù)可以嘗試最大次數(shù)
        $this->timeout = 10;        //任務(wù)可以執(zhí)行的最大秒數(shù) (超時(shí)時(shí)間)脉顿。
        $this->logEntity = $logEntity;
    }
  • handel方法(自動(dòng)生成的)中蝌麸,寫(xiě)自己的邏輯,handel方法的參數(shù)可以注入,如下:

    /**
         * Execute the job.
         * @param:$logRepository 注入的倉(cāng)庫(kù)
         * @return void
         */
        public function handle(LogRepositoryInterFace $logRepository)
        {
            //調(diào)用Repository save方法
            $logRepository->save($this->logEntity);
        }
    

    我這里執(zhí)行的是把傳入的log實(shí)體傳入log倉(cāng)庫(kù)的save方法中艾疟,來(lái)進(jìn)行保存日志的操作

  • 你可以直接在任務(wù)類中定義 failed 方法来吩,允許你在任務(wù)失敗時(shí)執(zhí)行針對(duì)于該任務(wù)的清理工作,如發(fā)送通知德能

    /**
         * 任務(wù)失敗的處理過(guò)程
         *
         * @param Exception $exception
         * @return void
         */
        public function failed(Exception $exception)
        {
            // 給用戶發(fā)送任務(wù)失敗的通知,等等……
            log::info('日志記錄失敗');
        }
    

4.使用隊(duì)列分發(fā)任務(wù)

一旦你寫(xiě)完了你的任務(wù)類你就可以使用它自帶的 dispatch 方法分發(fā)它蔽莱。傳遞給 dispatch 方法的參數(shù)將會(huì)被傳遞給任務(wù)的構(gòu)造函數(shù)

//存入隊(duì)列
Logs::dispatch($logEntity);

5.運(yùn)行隊(duì)列

  • 可以在命令行直接命令:

    php artisan queue:work redis --queue=logs
    

    這里的redis就是運(yùn)行時(shí)使用的連接弟疆,--queue=log是運(yùn)行時(shí)使用的隊(duì)列,它會(huì)一直運(yùn)行直到它被手動(dòng)停止(ctrl+c)或終端被關(guān)閉盗冷。

  • 也可以使用supervisor來(lái)運(yùn)行和管理

    Supervisor 是 Linux 操作系統(tǒng)下中的一個(gè)進(jìn)程監(jiān)控器怠苔,它可以在 queue:work 掛掉時(shí)自動(dòng)重啟之。

    • 在 Ubuntu 上安裝 Supervisor仪糖,你可以使用如下命令:

      sudo apt-get install supervisor
      
    • 配置supervisor

      [program:logs]
      process_name=%(program_name)s_%(process_num)02d
      command=php /home/vagrant/code/plato2/artisan queue:work redis --queue=logs
      autostart=true
      autorestart=true
      user=root
      numprocs=8
      redirect_stderr=true
      stdout_logfile=/home/vagrant/code/plato2/storage/logs/worker.log
      
      

      這里 user 填寫(xiě)網(wǎng)站運(yùn)行進(jìn)程的用戶柑司,如www或者root

      numprocs 表示啟動(dòng)多少個(gè)進(jìn)程來(lái)監(jiān)聽(tīng) Laravel 隊(duì)列

      command一行的artisan路徑要改成自己的項(xiàng)目路徑,

      stdout_logfile 也要改成自己的路徑

    • 啟動(dòng)supervisor

      sudo supervisorctl reread
      
      sudo supervisorctl update
      
      sudo supervisorctl start logs:*
      

      這里值得注意的是,如果 Laravel 處理隊(duì)列的代碼更改了乓诽,需要重啟 Supervisor 的隊(duì)列管理才能生效

    • 其他的supervisor命令

      sudo supervisorctl status logs:*(查看進(jìn)程運(yùn)行狀態(tài))
      sudo supervisorctl stop log:*(關(guān)閉logs開(kāi)頭的進(jìn)程)
      
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帜羊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸠天,更是在濱河造成了極大的恐慌,老刑警劉巖帐姻,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稠集,死亡現(xiàn)場(chǎng)離奇詭異奶段,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)剥纷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)痹籍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晦鞋,你說(shuō)我怎么就攤上這事蹲缠。” “怎么了悠垛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵线定,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我确买,道長(zhǎng)斤讥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任湾趾,我火速辦了婚禮芭商,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搀缠。我一直安慰自己铛楣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布艺普。 她就那樣靜靜地躺著簸州,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衷敌。 梳的紋絲不亂的頭發(fā)上勿侯,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音缴罗,去河邊找鬼助琐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛面氓,可吹牛的內(nèi)容都是我干的兵钮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舌界,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掘譬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起呻拌,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤葱轩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體靴拱,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垃喊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袜炕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片本谜。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖偎窘,靈堂內(nèi)的尸體忽然破棺而出乌助,到底是詐尸還是另有隱情,我是刑警寧澤陌知,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布他托,位于F島的核電站,受9級(jí)特大地震影響纵诞,放射性物質(zhì)發(fā)生泄漏上祈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一浙芙、第九天 我趴在偏房一處隱蔽的房頂上張望登刺。 院中可真熱鬧,春花似錦嗡呼、人聲如沸纸俭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)揍很。三九已至,卻和暖如春万伤,著一層夾襖步出監(jiān)牢的瞬間窒悔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工敌买, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留简珠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓虹钮,卻偏偏與公主長(zhǎng)得像聋庵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芙粱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 安裝Supervisor Supervisor 是 Linux 系統(tǒng)中常用的進(jìn)程守護(hù)程序祭玉。如果隊(duì)列進(jìn)程 queue...
    徐猿猿閱讀 1,117評(píng)論 0 2
  • 安裝 可以用Python的pip工具進(jìn)行安裝 也可以使用Linux的包管理命令安裝 配置 運(yùn)行如下命令可以查看默認(rèn)...
    damoclesword閱讀 1,826評(píng)論 0 0
  • 隊(duì)列 Laravel隊(duì)列服務(wù)為各種不同的后臺(tái)隊(duì)列提供統(tǒng)一的API允許推遲耗時(shí)任務(wù)(例如發(fā)送郵件)的執(zhí)行,從而大幅提...
    快點(diǎn)跑哇閱讀 4,159評(píng)論 0 1
  • 1.隊(duì)列的應(yīng)用場(chǎng)景: PHP在異步編程上的短板是眾所周知的春畔,這也是當(dāng)年P(guān)HP能夠迅速火起來(lái)的一個(gè)重要特性脱货,當(dāng)然岛都,這...
    范仁鏜閱讀 5,841評(píng)論 0 3
  • 使用場(chǎng)景:處理一些耗時(shí)或者高并發(fā)的操作,把操作放到隊(duì)列中異步執(zhí)行蹭劈,可以有效緩解系統(tǒng)壓力疗绣、提高系 統(tǒng)響應(yīng)速度和負(fù)載能...
    Uzero閱讀 423評(píng)論 0 0