Symfony Messenger - Behandlung erneut fehlgeschlagener Nachrichten

in  Zikula Apps , , , ,

Symfony Messenger - Behandlung erneut fehlgeschlagener Nachrichten

Im Symfony Messenger gibt die Möglichkeit, fehlgeschlagene Nachrichten an eine failed queue zu leiten. In diesem Sammelbecken können diese dann inspiziert und nach Korrektur des zu Grunde liegenden Problems erneut verarbeitet werden.

Schlagen sie dabei erneut fehl, landen sie allerdings per Standard nicht wieder in der failed queue, sondern werden verworfen. Dies hat damit zu tun, dass die Nachricht bereits einen SentToFailureTransportStamp besitzt.

Möchte man jedoch die Nachricht immer wieder auffangen, bietet es sich an, diesen Stamp einfach vorher wieder zu entfernen. Dies kann mit der folgenden Middleware getan werden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

namespace App\...\Middleware;

use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
use Symfony\Component\Messenger\Middleware\StackInterface;
use Symfony\Component\Messenger\Stamp\SentToFailureTransportStamp;

/**
 * This middleware ensures that a message that had been on the failed queue and retried again
 * fails again is sent to the failed queue instead of being discarded.
 *
 * @see https://github.com/symfony/symfony/blob/5.x/src/Symfony/Component/Messenger/EventListener/SendFailedMessageToFailureTransportListener.php#L45-L48
 * @see https://github.com/symfony/symfony/issues/33685
 * @see https://github.com/symfony/symfony/issues/35449
 * @see https://github.com/symfony/symfony/issues/35459
 */
class EnforceFailedQueueMiddleware implements MiddlewareInterface
{
    public function handle(Envelope $envelope, StackInterface $stack): Envelope
    {
        if (null !== $envelope->last(SentToFailureTransportStamp::class)) {
            $envelope = $envelope->withoutAll(SentToFailureTransportStamp::class);
        }

        return $stack->next()->handle($envelope, $stack);
    }
}

Übrigens ist bei Symfony derzeit eine Erweiterung in der Mache, mit der sich mehrere failed queues konfigurieren lassen. Dies eröffnet wiederum neue Einsatzmöglichkeiten. Zum Beispiel lassen sich so unterschiedliche Arten von Fehlern kanalisieren.

Weitere Beiträge in Kategorie Zikula Apps

Kommende Neuerungen in Symfony 5.3
- Vor zwei Tagen wurde Symfony 5.3.0-BETA4 veröffentlicht. Dies nehme ich zum Anlass, um einmal einen Überblick über die wichtigsten neuen Funktionen zu geben, auf die wir uns im Rahmen dieses Updates …
Response-Eigenschaften im Zikula Theme-Layer anpassen
- In Zikula gibt es eine Besonderheit zu beachten, welche Einfluss darauf nimmt, wie die aus einem Request resultierende Response zum anfragenden Client gelangt. Per Standard wird die Response in …
Tabellennamen mit Doctrine dynamisch anpassen
- Mit Hilfe der Metadaten von Doctrine lassen sich jegliche Daten zu einer Entität zur Laufzeit verändern. Allerdings kann das in manchen Anwendungsfällen fortwährend notwendig sein, zum Beispiel in …
Kommende Neuerungen in Symfony 5.2
- Vor zwei Tagen wurde Symfony 5.2.0-BETA2 veröffentlicht. Dies nehme ich zum Anlass, um einmal einen Überblick über die wichtigsten neuen Funktionen zu geben, auf die wir uns im Rahmen dieses Updates …
Zikula Core 3.0.3 mit Sicherheits-Update von Symfony 5
- Vor kurzem hatten wir über das Release von Zikula 3.0.1 berichtet, welches wichtige Korrekturen für Zikula 3 bereitgestellt hat. Vor einer Woche wurde die nächste Version 3.0.2 veröffentlicht. …