<?php
namespace App\Infrastructure\EventSubscriber;
use App\Messenger\TimestampableMessageInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\SendMessageToTransportsEvent;
use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent;
class MessengerSubscriber implements EventSubscriberInterface
{
public function onSendMessageToTransports(SendMessageToTransportsEvent $event): void
{
$envelope = $event->getEnvelope();
$message = $envelope->getMessage();
if ($message instanceof TimestampableMessageInterface) {
$message->setCreatedAt(new \DateTimeImmutable());
}
}
// this event is not triggered inside a sync transport
public function onWorkerMessageReceivedEvent(WorkerMessageReceivedEvent $event): void
{
$envelope = $event->getEnvelope();
$message = $envelope->getMessage();
if ($message instanceof TimestampableMessageInterface) {
$message->setHandlingAt(new \DateTimeImmutable());
}
}
public static function getSubscribedEvents(): array
{
return [
SendMessageToTransportsEvent::class => 'onSendMessageToTransports',
WorkerMessageReceivedEvent::class => 'onWorkerMessageReceivedEvent',
];
}
}