在 Laravel 5.6 使用 Queues 隊列

環境

  • Windows 10
  • Homestead 7.4.1

安裝套件

1
composer require predis/predis

建立工作

設定一個可以儲存包裹的工作。

1
php artisan make:job StorePackage

設定工作

新增 App\Jobs\StorePackage.php 檔並建立工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Package;

class StorePackage implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public function __construct()
{
//
}

public function handle()
{
$package = New Package;
$package->name = 'Test Package';
$package->save();
}
}

推入隊列

PackageControllerindex() 方法內推入隊列。

1
2
3
4
public function index()
{
dispatch(New \App\Jobs\StorePackage);
}

隊列工人

讓隊列工人從隊列拉出工作並執行它們。

1
php artisan queue:work --timeout=10 --sleep=10 --tries=3
  • --timeout 設定給每個工作允許執行的秒數。
  • --sleep 設定讓監聽器在拉取新工作時要等待的秒數。
  • --tries 設定一個工作應該最多被執行的次數。