鍍金池/ 問答/人工智能  PHP  網(wǎng)絡(luò)安全/ laravel隊列延遲問題

laravel隊列延遲問題

控制器

<?php

namespace App\Http\Controllers\User;

use App\Jobs\SendReminderEmail;
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class JobsController extends Controller
{
    //
    public function jobs()
    {
        $user = User::find(1);
        $this->dispatch((new SendReminderEmail($user))->delay(now()->addSeconds(30)));#延遲30秒
    }
}

隊列文件

<?php

namespace App\Jobs;

use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

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

    protected $user;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
        Log::info('我是來自隊列,發(fā)送了一個郵件', ['id' => $this->user->id, 'name' => $this->user->name]);
    }

    public function fail($exception = null)
    {

    }
}

我在控制器中設(shè)置了當(dāng)請求過來的時候觸發(fā)隊列,我看delay好像應(yīng)該是延遲,然后我設(shè)置的是30秒執(zhí)行,為嘛當(dāng)我請求玩了以后,立馬去看日志馬上就有數(shù)據(jù)被輸出到laravel.log,而不是30秒后才被輸出。用的數(shù)據(jù)庫隊列

回答
編輯回答
赱丅呿

這就要先看你的 .env 文件中是 QUEUE_DRIVER 的值是啥,如果是sync的話,那delay執(zhí)行是無效的,都是直接馬上執(zhí)行,如果需要異步延遲執(zhí)行,需要修改為其它 database,beanstalkd,sqsredis中的一種了,修改之后,還需要啟動任務(wù)監(jiān)聽

php artisan queue:listen
2018年9月12日 20:08