Laravel 隊列的簡單使用例子


場景:

在一個a系統中注冊一個用戶時,發送請求到b系統中也注冊一個相同信息的賬號,考慮到網絡有可能錯誤的原因,所以使用隊列去處理

 

1.修改根目錄 .env 文件的QUEUE_CONNECTION字段配置 為database

Laravel可配置多種隊列驅動,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具體參見app/config/queue.php)
其中sync為同步,database為使用數據庫,后面三種為第三方隊列服務,最后一種為不使用隊列。
通過在 .env 中的 QUEUE_CONNECTION 選項,來決定選擇何種驅動。
如 QUEUE_CONNECTION=database 即為選擇數據庫驅動隊列。


2.創建數據庫隊列表(database方式)

為了使用 database 隊列驅動,你需要一張數據表來存儲任務。

php artisan queue:table

  

php artisan migrate

  生產一張隊列表

 

3.生成任務類

在你的應用程序中,隊列的任務類都默認放在 app/Jobs 目錄下。

如果這個目錄不存在,那當你運行 make:job Artisan 命令時目錄就會被自動創建。

你可以用以下的 Artisan 命令來生成一個新的隊列任務:

 
php artisan make:job SynUser

  

4.在隊列類里面的handle方法中寫上業務邏輯(比如發送網絡請求,發送郵件等等,這里簡單寫個日志代替)

 

protected $message;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        \Log::info($this->message);
    }

 

  

 5.在控制器中加入一個測試方法,直接調用隊列類的 dispatch方法,類似生產了一個任務

public function test()
{
    SynUser::dispatch('發送請求到b系統生成賬號');
}

  這時,由於隊列還沒開啟,數據庫的隊列表中會有一個任務,等待隊列啟動后執行

 

6.執行命令開啟隊列

php artisan queue:work

  這時,隊列表中的任務執行后就會自動刪除了,類似消費了任務

 

以上是拋轉引玉的一個簡單例子,具體細節可以查看laravel的隊列文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM