通過隊列,你可以将耗時任務 (如發送電子郵件) 的處理往後推延。延遲這些耗時的任務可以極大地提升 web 請求響應速度
隊列配置檔案存儲在 config/queue.php 中。
在這個檔案中,你可以找到架構中包含的每個隊列驅動程式的連接配接配置,其中包括資料庫,Beanstalkd,Amazon
SQS,Redis,和一個同步驅動程式(供本地使用)。還包括一個用于丢棄排隊任務的 null 隊列驅動
驅動程式說明和先決條件
資料庫
要使用 database 隊列驅動程式,需要一個資料庫表來儲存任務。要生成建立此表的遷移
php artisan queue:table
去修改項目使用的隊列驅動
在.env裡面,QUEUE_CONNECTION=database,這個就是将驅動修改成database的驅動
開啟隊列,因為隊列是需要開啟才可以使用的,一旦開啟,他不會主動關閉,除非是把環境關閉
php artisan queue:work
使用消息隊列處理耗時處理,比如:
在消息隊列ProcessPodcast類中去編寫模拟耗時任務
public function handle()
{
//開始發送郵件,需要5秒才能發送完成
info('開始發送郵件');
sleep(5);
info('郵件發送成功');
}
然後去使用它,
//使用隊列發送郵件
ProcessPodcast::dispatch();
return '你好啊';
這樣是不需要去等待的,如果是沒有使用隊列時,它會等待任務處理完才會響應頁面
然後,每次執行一次隊列,它都會在使用遷移生成的資料庫檔案jobs中去添加消息,一旦這個任務處理完後,資料庫中的資料才會被删除
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxCMy8VZ6l2css0VaVzSXpVNo1CT1A1QiVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLlJDN4UmZ4YDO1AjMzUzMhdzYiRjYmhTMmdTZzMDM2M2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)