Wat te doen als Laravel Queues vastlopen?
Voor verschillende taken is het handig om Laravel Queues te gebruiken. Denk aan:
- taken die meer dan een aantal miliseconden duren,
- taken die los van elkaar uitgevoerd kunnen worden,
- taken die binnen een foreach-loop gebeurd.
Concrete voorbeelden zijn het genereren van PDF-bestanden, automatische systeemberichten via e-mail of het importeren van (bulk-)data.
Dit soort opdrachten hebben vaak te maken met een externe bron die buiten je invloed ligt. Denk bijvoorbeeld aan het mailen via Microsoft Exchange. Wat doet jouw systeem als er een fout bij Microsoft optreed? Hoe vang je dit op zodat de mail op een later moment de deur uitgaat? Misschien nog wel belangrijker, wat is de invloed op de rest van de functionaliteit als de mail vastloopt?
In deze blog gebruiken we e-mail als voorbeeld, maar wezenlijk werkt dit hetzelfde voor elk proces dat gebruik maakt van een externe bron.
Externe bronnen aanroepen
Een externe mailserver toevoegen is relatief eenvoudig: gegevens invoeren in je .env
-file, connectie testen en gaan. Maar onderhuids gebeurd er wel het een en ander als je aan het mailen bent. Er wordt connectie gemaakt met een SMTP-server, data wordt verzonden, mail wordt verstuurd, er wordt gekeken of de mail bezorgd kan worden, enzovoort.
Meestal duurt zoiets daarom 1 tot 2 seconden. In de meeste gevallen werkt alles en is de mail daarna verzonden. Al die tijd zat de eindgebruiker te wachten. In principe onnodig, want die mail kan er ook wel uit zonder erop te wachten. In dit geval kan je bijvoorbeeld Laravel Queues gebruiken.
Wat zijn Laravel Queues?
Laravel queues stellen je in staat om (tijdrovende) taken op de achtergrond uit te voeren, waardoor je applicatie sneller kan reageren op webverzoeken en een betere gebruikerservaring biedt. Door gebruik te maken van verschillende queue backends zoals Amazon SQS, Redis of relationele databases, biedt Laravel een uniforme queueing API. Queues kunnen zeer veel taken tegelijk uitvoeren door meerdere Queue Workers te installeren.
Voor meer informatie kun je de officiële Laravel documentatie raadplegen.
Probleem met externe bronnen
Goed, we hebben nu het proces uit het hoofdproces gehaald. De wachttijd is nu ingeperkt. Maar dan… E-mail kan nogal eens fout gaan en om verschillende redenen.
Vooral het mailen via 3e partijen is iets buiten onze invloed. Soms is een mailadres niet beschikbaar, dan zal het nooit gaan werken, maar vaak is de oorzaak van het niet-afleveren van tijdelijke aard. De volgende problemen en gevolgen (kunnen) ontstaan als de mail niet verstuurd wordt in een functioneel (sync) proces:
- Code dat uitgevoerd moet worden ná het verzenden van de mail wordt niet uitgevoerd doordat de 500-server error ontstaat. Hierdoor ontstaan niet-afgeronden processen met onbetrouwbare data.
- E-mail wordt niet verzonden. De ontvanger mist benodigde informatie.
- Systeembeheerders moeten actief logfiles monitoren of via gebruikers horen dat het systeem niet mailt. Dit is altijd te laat, en bovendien kan het lastig zijn om de data te corrigeren of het proces zo in te richten dat deze fouten mogen ontstaan.
Voorwaarden van de oplossing
Wij liepen geregeld tegen de bovenstaand problemen aan. In veel gevallen bleek “later proberen” de oplossing. Met dit in ons achterhoofd zijn we gaan zoeken naar een oplossing die aan de volgende voorwaarden voldoet:
- Het hoofdproces mag niet gestoord worden als er een notificatie niet verzonden kan worden.
- E-mails moeten automatisch opnieuw verzonden worden na x minuten en het liefst ook een aantal keer proberen.
- Systeembeheerders moeten een melding krijgen als de mail na een aantal pogingen blijft storen.
- In het geval van e-mail een extra voorwaarde dat deze melding niet verzonden kan worden per mail.
De oplossing
Wij hebben we de oplossing gevonden die helemaal voldoet aan de voorwaarden die we zojuist hebben gesteld. We komen graag met u in contact als u meer wilt weten over deze oplossing. U mag ons altijd mailen of bellen!
Meer weten over Laravel en Microsoft 365
U kunt altijd contact met ons opnemen of lees zelf meer over het mailen via Microsoft in een van onze blogs.
Meer weten over PDF’s genereren
Wij hebben jarenlange ervaring met het genereren van PDF-bestanden via Laravel applicaties. PDF authenticiteit is een onderwerp wat steeds belangrijker wordt. Lees meer hierover op de pagina over PDF Generatie.