簡體   English   中英

Laravel 5.3 隊列作業不工作

[英]Laravel 5.3 Queue Job is not working

我正在嘗試使用 Laravel database隊列發送我的發送電子郵件操作,但是這個過程仍然在我的瀏覽器中繼續而不是在后面工作。

這是我的控制器

protected function importUserExcel(UploadedFile $file, Request $request){

    $user_role = Role::where('name','=','user')->first();


    \Excel::load($file, function($reader) use ($user_role) {
        $excel =  $reader->select()->get();
        foreach($excel[0] as $line){
            $user = User::firstOrnew([
                'email' => $line['email']]);
            $user->email = $line['email'];
            $user->name = $line['name'];
            $user->password= bcrypt(srand(15));

            $user->town = $line['town'];
            $user->dealer_code = $line['dealer_code'];
            $user->type = $line['type'];
          //  $user->save();
            $user->sendUserEmail();
            //$user->attachRole($user_role);


        }
    });
}

這是我的模型函數

public function sendUserEmail()
{   
    $delay = Carbon::now()->addMinutes(15);
    \Log::info("Request Begins");
    $user = new SendEmails($this);
    $user->delay($delay);
    dispatch($user);
    \Log::info("Request Ends");
}

這是我的工作

類 SendEmails 實現了 ShouldQueue { 使用 InteractsWithQueue, Queueable, SerializesModels;

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

}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle(User $user)
{
    $broker = $user->broker;
    $brokerInstance = \Password::broker($broker);
    view()->share('locale', app()->getLocale());
    $response = $brokerInstance->sendResetLink([ 'email' => $user->email ], function (Message $message) {
        $message->subject(trans('emails.welcome_subject'));
    });
}

}

然而結果似乎最終不會延遲或排隊任何東西。 同時我的瀏覽器也在處理而不是將進程放在后面。

在此處輸入圖片說明

您的作業的構造函數不應調用 handle() 方法; 它應該只設置 handle 方法所需的屬性。 由您的隊列工作人員調用 handle 方法。

如果您為每個請求設置語言環境,您對 app()->getLocale() 的調用可能不正確; 作業是從另一個進程執行的,沒有中間件或相關的 http 請求。

class SendEmails implements ShouldQueue { use InteractsWithQueue, Queueable, SerializesModels;
    protected $user;

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

    public function handle() {
        $user = $this->user;
        $broker = $user->broker;
        $brokerInstance = \Password::broker($broker);

        view()->share('locale', app()->getLocale());
        $response = $brokerInstance->sendResetLink([ 'email' => $user->email ], function (Message $message) {
            $message->subject(trans('emails.welcome_subject'));
        });
    }
}

您可以通過以下方式重試(我假設您在 Laravel 文檔中做了說明,但總有一天它不起作用):

  1. 刪除數據庫中的表jobs
  2. 在控制台中運行命令php artisan migrate
  3. 運行命令php artisan queue:work在控制台中php artisan queue:work
  4. 重試你的應用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM