From 1f5c8a6790aba61e736461ab938321aa12fe42a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastien=20Cl=C3=A9ment?= Date: Thu, 11 Jul 2019 13:38:12 +0200 Subject: [PATCH] Cancel delayed message if handler fails --- .../Middleware/DispatchAfterCurrentBusMiddleware.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Messenger/Middleware/DispatchAfterCurrentBusMiddleware.php b/src/Symfony/Component/Messenger/Middleware/DispatchAfterCurrentBusMiddleware.php index 19c714d1b8..05ee86ffeb 100644 --- a/src/Symfony/Component/Messenger/Middleware/DispatchAfterCurrentBusMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/DispatchAfterCurrentBusMiddleware.php @@ -81,12 +81,16 @@ class DispatchAfterCurrentBusMiddleware implements MiddlewareInterface // "Root dispatch" call is finished, dispatch stored messages. $exceptions = []; while (null !== $queueItem = array_shift($this->queue)) { + // Save how many messages are left in queue before handling the message + $queueLengthBefore = \count($this->queue); try { // Execute the stored messages $queueItem->getStack()->next()->handle($queueItem->getEnvelope(), $queueItem->getStack()); } catch (\Exception $exception) { // Gather all exceptions $exceptions[] = $exception; + // Restore queue to previous state + $this->queue = \array_slice($this->queue, 0, $queueLengthBefore); } }