Nouveau dans Laravel 13.26. Quand un produit est modifié plusieurs fois de suite, réindexer à chaque modification coûte cher. La parade habituelle, ShouldBeUnique, écarte les doublons… mais garde le premier événement : l'index reçoit une version déjà périmée. L'attribut #[DebounceFor] attend la fin de la rafale et ne traite que le dernier événement.
Avant
class MettreAJourLIndex implements ShouldQueue, ShouldBeUnique { public int $uniqueFor = 30; public function uniqueId(ProduitModifie $event): string { return (string) $event->produitId; } }
Depuis Laravel 13.26
#[DebounceFor(30)] class MettreAJourLIndex implements ShouldQueue { public function debounceId(ProduitModifie $event): string { return (string) $event->produitId; } }
Chaque événement est mis en file avec 30 secondes de délai. Au moment de le traiter, Laravel écarte ceux qu'un événement plus récent, avec le même debounceId, a remplacés. L'option maxWait (#[DebounceFor(30, maxWait: 120)]) évite qu'un flot continu repousse le traitement indéfiniment.
À faire
Réécrivez MettreAJourLIndex avec #[DebounceFor]. Les tests envoient des rafales de modifications dans une vraie file d'attente, puis lancent un worker : chaque produit doit être indexé une fois, avec son dernier nom.