1、簡介
Lumen佇列服務為各種不同的後台隊列驅動提供了統一的API。隊列允許你延遲耗時任務(例如發送郵件)的執行,從而大幅提高web請求的響應速度。
1.1 配置
隊列配置選項位於 .env檔案。
1.2 隊列驅動預備知識
資料庫
要使用 database作為隊列驅動,需要一張資料庫表來存放任務:
Schema::create('jobs', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('queue'); $table->longText('payload'); $table->tinyInteger('attempts')->unsigned(); $table->tinyInteger('reserved')->unsigned(); $table->unsignedInteger('reserved_at')->nullable(); $table->unsignedInteger('available_at'); $table->unsignedInteger('created_at'); $table->index(['queue', 'reserved', 'reserved_at']);});
其它隊列依賴
下面是以上列出隊列驅動需要安裝的依賴:
- Amazon SQS: aws/aws-sdk-php ~3.0
- Beanstalkd: pda/pheanstalk ~3.0
- Redis: predis/predis ~1.0
2、和Laravel的不同之處
和架構許多其它功能一樣,Lumen的隊列任務方法依賴於Laravel隊列任務,因此,要瞭解Lumen隊列任務的更多細節,可查看 完整的Laravel隊列文檔。
但是,Lumen和Laravel的隊列實現也有少許不同支援,下面我們就來討論這些區別。首先我們來看隊列任務的產生。
2.1 產生器
Lumen並沒有內建自動建立新的任務類,取而代之的,你需要拷貝架構內建的 ExampleJob類,這個類提供了每個隊列任務都共用的基本類結構, ExampleJob繼承的基類 Job已經包含了 InteractsWithQueue, Queueable和 SerializesModels這些trait:
2.2 分發任務
再次重申,關於分發隊列任務的完整資訊請參考Laravel隊列文檔,和Laravel架構一樣,你可以使用 dispatch方法從Lumen應用的任何地方分發任務:
dispatch(new ExampleJob);
當然,你還可以使用 Queue門面,如果你選擇使用這個門面,需要取消檔案 bootstrap/app.php中 $app->withFacades()前面的注釋:
Queue::push(new ExampleJob);