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.4/src/Symfony/Component/Messenger/EventListener/SendFailedMessageToFailureTransportListener.php#L63-L66
 * @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 6.2
- Gegenwärtig laufen die Arbeiten an der nächsten Symfony-Version 6.2. Wie immer gibt es regelmäßige Einblicke in die wichtigsten, zu erwartenden Features und Verbesserungen. Dieser Beitrag zeigt im …
Zikula 4 - Ansätze für ein leichtgewichtigeres User Management
- Im Rahmen der Schlankheitskur vom Zikula Core sind einige Altlasten bereits entfernt worden. Das Admin-Interface baut nun auf dem EasyAdminBundle auf. Ein größerer Knoten, den es noch zu entwirren …
Zikula 4 und ModuleStudio - Weitere Integration mit dem EasyAdminBundle
- Im letzten Beitrag wurde unter anderem dargestellt, dass Zikula 4 nun das EasyAdminBundle (EAB) integriert um das alte Admin-Interface abzulösen. Zwischenzeitlich sind die Arbeiten daran etwas …
Zikula 4 - Weiteres Ausmisten im Gange
- Getreu dem Motto Wer loslässt, hat die Hände frei wird der Zikula Core gegenwärtig ausgemistet: das Ziel ist es, wieder ein schlankes System zu schaffen, welches nicht jede Funktionalität selbst …
Zikula 4 - Fokus auf die eigenen Stärken
- Im Juli haben wir noch etwas zaghaft damit begonnen, historischen Ballast aus dem Zikula Core zu entfernen. Unter anderem wurden spezielle Themes und das Hook-System ausgesondert. Während der letzten …