Frage Laravel Mail Queue Unendliche Schleife bei Ausnahme


Hallo Mitprogrammierer, ich wünsche allen einen guten Morgen.

Die Situation

Laravel ist großartig. Laravel Mail Queues und die BeanStalkd Integration ist großartig. Ich brauchte fast keine Zeit, um alles zum Laufen zu bringen. Die Sonne scheint und es regnet nicht. Es ist toll.

Außer wenn beim Senden einer E-Mail eine Ausnahme ausgelöst wird. Dann wird diese Mail wieder und wieder und wieder bearbeitet und die Ausnahme wird auch wieder und wieder und wieder geworfen.

Endlosschleife.

Ich denke, ich würde dies nicht einmal bemerken, wenn ich die Datenbank nicht mit ungültigen Daten versehen hätte. Die Validierung hätte normalerweise dafür gesorgt, dass E-Mails wie 361FlorindaMatthäi@gmail.com enden Sie nicht mit der folgenden Ausnahme:

[Swift_RfcComplianceException]
  Adresse in Postfach gegeben [361FlorindaMatthäi@gmail.com] nicht   Übereinstimmung mit RFC 2822, 3.6.2.

Aber welche Validierung hätte ich nicht gemacht, zum Beispiel, wenn mein Mandrill-Konto an seine Grenzen stößt oder mein Server die Internetverbindung verliert, was auch immer. Eine Ausnahme sendet es in eine Endlosschleife.

In der Welt, wo die Sonne scheint und alles großartig ist, muss der Job als vergraben oder suspendiert gekennzeichnet werden und die nächste E-Mail sollte verarbeitet werden. Eine Endlosschleife mit einer ungültigen E-Mail-Adresse ist nicht großartig.

Grundsätzlich versendet Ihre Anwendung keine E-Mails mehr. Dieser Typ hat ungefähr das gleiche Problem.

Wie kann ich das beheben? Ist jemand anderen diesem Fehler begegnet?

Jede Hilfe wird sehr geschätzt.


5
2018-05-04 08:01


Ursprung


Antworten:


Sie müssen Laravel nur so oft reisen, um einen bestimmten Job auszuprobieren, bevor Sie eine Entscheidung fällen:

php artisan queue:daemon --tries=3

Auf diese Weise wird die Verarbeitung dieses spezifischen Jobs nach 3 Versuchen beendet.


9
2018-05-04 08:28



Der schwierige Teil eines Systems auf der Grundlage von Warteschlangen ist es, mit den Fehlern fertig zu werden. Ich habe Dutzende von Millionen Jobs über BeanstalkD und viele mehr über andere Systeme wie SQS laufen lassen.

Mit diesem Swift_RfcComplianceException Ausnahme: Es ist klar, dass der Job nie erfolgreich sein wird, und es wäre sinnlos, es erneut zu versuchen.

Einige andere Probleme können möglicherweise behoben werden, aber in jedem Fall müssen Sie den Code in einen try / catch-Block schreiben und alles tun, was Sie können.

Da es keine Möglichkeit gibt, dieses spezielle Problem zu "beheben", würde ich aufzeichnen, was passiert ist (den Namen der Ausnahme und jede Nachricht und die Daten), um sie anzumelden, und dann delete oder bury die Arbeit. Wenn Sie das speichern job-id in dem Protokoll, wenn es begraben ist, können Sie zurückgehen und delete oder kick diese bestimmte Arbeit später wieder - dies wäre, nachdem man in der Lage war, zu ändern, was mit dem Job passiert (anstatt es erneut zu versagen).


1
2018-05-04 09:03