Laravel 消費佇列的正確使用姿勢

KEL發表於2017-05-03

目前版本 ( version >= 5.3) 有三種方式進行佇列消費

  • queue:work - 這是一個新的後臺程式(不再需要 daemon 標記), 這種方式執行,框架只會啟動一次,並保持迴圈去消費佇列,除非出現異常否則該程式將無限時間執行下去。這種方式消耗的 cpu記憶體 都比 queue:listen 要少,因為在整個生命週期中框架一直是在保持執行狀態。同時,使用該方法時如果更新了程式碼,記得使用 queue:restart 來重啟。
  • queue:work --once - 該方法會啟動框架,執行 job,然後銷燬掉。在開發和測試程式碼的時候使用比較合適,因為每次都會載入一遍程式碼嘛。
  • queue:listen - 這種方式執行,框架每次都會啟動,執行job,然後關閉,然後再次啟動框架,執行job,然後關閉,這樣一直迴圈(每次執行完一次都會完全釋放掉執行時的記憶體和程式)。所以這種方式你不用擔心程式碼的熱更新,不用去重啟 queue,隨之而來的另外一個好處是不用去擔心 queue:work 帶來的記憶體洩漏。

    注意 從 5.3 版本開始 --daemon 這個引數已經不再起作用了,可以看 Illuminate\Queue\Console\WorkCommand.php

    protected $signature = 'queue:work
    {connection? : The name of connection}
    {--queue= : The queue to listen on}
    {--daemon : Run the worker in daemon mode (Deprecated)}
    {--once : Only process the next job on the queue}
    {--delay=0 : Amount of time to delay failed jobs}
    {--force : Force the worker to run even in maintenance mode}
    {--memory=128 : The memory limit in megabytes}
    {--sleep=3 : Number of seconds to sleep when no job is available}
    {--timeout=60 : The number of seconds a child process can run}
    {--tries=0 : Number of times to attempt a job before logging it failed}';
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章