laravel使用消息隊列


隊列

隊列用於異步執行消耗時間多的工作,比如發送郵件等操作,好處是可以快速為客戶響應結果,具體處理異步后台的操作。

下面的操作使用高效的redis完成處理,所以需要安裝相應的擴展包

composer require "predis/predis:~1.0"

處理失敗任務

有時你的隊列任務會失敗。Laravel包含了一個便捷的方式指定任務會被最大嘗試的次數。在一個任務到達了它最大嘗試次數之后,它會被放入failed_jobs表。要創建failed_jobs表你可以使用queue:failed-table命令:

php artisan queue:failed-table
php artisan migrate	

創建任務

php artisan make:job TestJob

在生成的類中的handle方法設置任務具體的動作,下面是一個簡單的示例。

protected $user;

public function __construction(User $user)
{
 	$this->user = $user;
}

public function handle()
{
	sleep(6);
	file_put_contents('a.php', var_export($this->user->toArray(), true));
}

分發任務

TestJob::dispatch(User::find(1));

隊列處理器

隊列處理器用於執行推送到隊列中的任務

php artisan queue:work

要使queue:work在后台運行需要使用下面的Supervisor(生產環境必用)

Laravel隊列監控面板

Horizon提供了一個漂亮的儀表盤,並且可以通過代碼配置你的Laravel Redis隊列,同時能夠讓你輕松地監控你的隊列系統中諸任務吞吐量,運行時間和失敗任務等關鍵指標

安裝

composer require laravel/horizon
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

啟動執行任務監聽

只需要一條命令語句即可啟動隊列執行進程。如果修改了任何代碼需要重啟horizon監聽(需要在Homestead系統中執行)

php artisan horizon

可以通過路由/horizon以圖形界面查看任何狀態

在這里插入圖片描述

Supervisor

Supervisor是一個進程控制系統,用於讓我們的隊列在后台運行,並自動維護進行,如果掛了就自動重啟。

修改配置文件

sudo vi /etc/supervisor/conf.d/laravel-worker.conf

內容如下

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/vagrant/Code/laravel-cms/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=vagrant
numprocs=8
redirect_stderr=true
stdout_logfile=/home/vagrant/Code/laravel-cms/worker.log

注意command與stdout_logfile配置根據環境自行更改

運行

一次執行下面命令加載配置並運行Supervisor

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

這樣我們就不需要執行php artisan queue:work命令了,交給Supervisor自動維護吧。


免責聲明!

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



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