src/EventSubscriber/FailedMessageSubscriber.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Message\ExportMessage;
  4. use App\Service\MailerService;
  5. use Exception;
  6. use Psr\Log\LoggerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
  9. use Symfony\Component\Messenger\Event\WorkerStoppedEvent;
  10. use Vdm\Bundle\LibraryBundle\Service\StopWorkerService;
  11. class FailedMessageSubscriber implements EventSubscriberInterface
  12. {
  13.     private LoggerInterface $logger;
  14.     private MailerService $mailerService;
  15.     private StopWorkerService $stopWorkerService;
  16.     public function __construct(
  17.         LoggerInterface $logger,
  18.         MailerService $mailerService,
  19.         StopWorkerService $stopWorkerService
  20.     ) {
  21.         $this->logger $logger;
  22.         $this->mailerService $mailerService;
  23.         $this->stopWorkerService $stopWorkerService;
  24.     }
  25.     public static function getSubscribedEvents()
  26.     {
  27.         return [
  28.             WorkerMessageFailedEvent::class => ['onWorkerMessageFailed'1],
  29.             WorkerStoppedEvent::class => ['onWorkerStoppedEvent'1],
  30.         ];
  31.     }
  32.     public function onWorkerMessageFailed(WorkerMessageFailedEvent $event): void
  33.     {
  34.         $message $event->getEnvelope()->getMessage();
  35.         if ($event->willRetry()) {
  36.             $this->logger->info(sprintf(
  37.                 'Message "%s" will be retried, skipping sending error message.',
  38.                 get_class($message)
  39.             ));
  40.             return;
  41.         }
  42.         switch (true) {
  43.             case $message instanceof ExportMessage:
  44.                 $this->onExportMessageFailed($message);
  45.                 break;
  46.         }
  47.     }
  48.     public function onWorkerStoppedEvent(WorkerStoppedEvent $event): void
  49.     {
  50.         // Avoid to break consumer in RethrowExceptionAfterWorkerStoppedSubscriber
  51.         $this->stopWorkerService->setThrowable(null);
  52.     }
  53.     private function onExportMessageFailed(ExportMessage $message): void
  54.     {
  55.         $this->logger->info('==SendingErrorEmail==============================================');
  56.         $this->logger->info('Export message failed after all retries, sending error email to user ' $message->getUser()->getUsername(), [$message]);
  57.         try {
  58.             //$this->mailerService->sendExportErrorEmail($message->getUser());
  59.         } catch (Exception $e) {
  60.             $this->logger->critical("Critical error when process ERROR email message : " $e->getMessage(), [$message]);
  61.         }
  62.     }
  63. }