2016-08-22 2 views
0

Was zu erreichen ist zu senden und E-Mail, zu einer gewählten Zeit (durch den Benutzer) so war mein Ansatz, um den Zeitunterschied zu berechnen dann, dass die Verzögerungszeit auf ein Warteschlange.Warteschlange Verzögerung, Senden einer E-Mail zu einer bestimmten Zeit

aber es scheint, es nicht funktioniert, wie ich alle E-Mails erwarten zusammenkommen und nicht zur rechten Zeit

-Controller geliefert

public function notifyme($add) 
{ 

    $created = Carbon::now()->addMinutes($add); 
    $now = Carbon::now(); 

    $days = 1440*$created->diff($now)->days; 
    $hours = 60*$created->diff($now)->h; 
    $minutes = $days + $hours + $created->diff($now)->i; 

    $user = Auth::user(); 


    $user->notify((new notifyme($user))->delay($minutes)); 

    return redirect('/notif'); 
} 

Route

Route::get('notifyme/{add}', '[email protected]'); 

.env

QUEUE_DRIVER="database" 

im Laravel mit 5.3, so dass die notifyme Controller implementiert den ShouldQueue Vertrag.

jetzt, wenn ich laufen php artisan queue:work oder php artisan queue:listen und testen Sie diese die E-Mail verzögert wird geschickt, aber wenn ich es wieder tun, (während der erste Job noch verzögert wird) beide E-Mails erhalten zusammen sofort oder nach einiger Zeit (nicht an die gesendet richtige Zeit $ add)

Irgendeine Idee, was hier falsch ist? gibt es einen besseren Ansatz? wie mit einem Zeitplan? oder was?

+0

Welchen Dienst Sie für Verzögerung verwenden, gibt es eine Nachricht auf Laravel, dass "Hinweis: Der Amazon SQS-Dienst hat eine maximale Verzögerungszeit von 15 Minuten." –

+0

ich verwende lokale Umgebung –

+0

es geht nicht um Umgebung, es ist über welchen Treiber Sie verwenden. Sie finden dies auf Config/queue.php –

Antwort

0

Einer der Ansatz kann befolgt werden, um Warteschlangenverzögerung für das Senden einer E-Mail zu erreichen, ist Larawel eingebaute Mail-Funktion mit Warteschlangeneinrichtung zu verwenden. Sie können Referenz nehmen von Laravel Delay Mail Queue

Beispiel:

Mail::later(5, 'emails.welcome', $data, function ($message) { 
// 
}); 

5 ist, verzögerten Sekunden.

+0

Ich benutze Laravel 5.3 Benachrichtigungssystem, und die Planung, Sms Funktionalitie hinzufügen auch dies wird nicht ein guter Ansatz sein, denke ich in meinem Fall –

+0

Ok, so für jede verzögerte Funktionalität können Sie versuchen, einen Job in Laravel zu erstellen . beziehen Sie sich auf: https://laravel.com/docs/5.1/queues#delayed-jobs und legen Sie dynamisch den Warteschlangenverzögerungswert unter der Jobklasse fest. Hoffe, das kann dir helfen – Aarti

+0

dude ich benutze das bereits ich denke! überprüfe meinen Code –

Verwandte Themen