Ich versuche, meine E-Mail-Aktion senden mit Laravel database
Warteschlange jedoch diesen Prozess weiterhin in meinem Browser statt hinter zu arbeiten.Laravel 5.3 Queue Job funktioniert nicht
das ist mein Controller
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);
}
});
}
diese Funktion mein Modell ist
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");
}
und das ist mein Job
Klasse Sendemails implementiert ShouldQueue { Verwendung 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'));
});
}
}
jedoch Ergebnis scheint kommen schließlich nicht oder irgendetwas Warteschlangen zu verzögern. In der Zwischenzeit verarbeitet mein Browser auch, anstatt den Prozess hinter sich zu lassen.
Konnten Sie Ihre Steuerfunktion voll posten? –
ypdated @ VũTuấnAnh –
Ihr Code scheint in Ordnung außer Ihrem Protokoll. Versuchen Sie, Ihr Protokoll in die 'SendEmails'-Klasse zu verschieben. Wenn Sie Logger in Ihr Modell drücken, können Sie die Verzögerungszeit nicht sehen. By the way, in Ihrem Controller-Funktionen sollte View zurückgeben, um die Antwort an den Browser zu senden –