I have a simple messanger config:
framework:
    messenger:
        failure_transport: failed
        transports:
            async:
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                retry_strategy:
                    max_retries: 2
                    delay: 10000
            failed: 'doctrine://default?queue_name=failed'
        routing:
            someInterface: async
I would like to know about every message routed to failed transport f.e. system should send email notification to me when message is redirecting. My only idea is to periodically review messenger_messages table which contains messages stored in failed transport but imao it's not symfony-way solution. Do you know more clever solution for this feature?
I am using symfony/messenger with version 5.*
Ultimately, I applied the solution below:
<?php
/**
 * Author: writ3it
 */
namespace App\Maintenance\Messenger;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use Symfony\Component\Messenger\MessageBusInterface;
class FailedMessageListener implements EventSubscriberInterface
{
    /**
     * @var MessageBusInterface
     */
    private MessageBusInterface $bus;
    public function __construct(MessageBusInterface $bus)
    {
        $this->bus = $bus;
    }
    public function onMessageFailed(WorkerMessageFailedEvent $event)
    {
        if ($event->willRetry()) {
            return;
        }
        $envelope = $event->getEnvelope();
        $message = $envelope->getMessage();
        $subject = sprintf("Message added to failed transport. Message: %s", \get_class($message));
        $content = serialize($message);
        $notification = new FailedMessageNotificationEvent();
        $notification->setSubject($subject)
            ->setContent($content);
        $this->bus->dispatch($notification);
    }
    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            WorkerMessageFailedEvent::class => ['onMessageFailed', -256],
        ];
    }
}
FailedMessageNotificationEvent is a message that will be caught by my mailing handler. The FailedMessageListener class should be tagged as kernel.event_subscriber or autoconfigured.
I didn't use middleware because messenger sends messages to the failed transport directly, without middlewares.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With