src/WellCommerce/Bundle/AppBundle/EventListener/MessengerQueueSubscriber.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\AppBundle\EventListener;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
  16. use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent;
  17. use WellCommerce\Bundle\AppBundle\Entity\MessengerQueue;
  18. use WellCommerce\Bundle\CoreBundle\DependencyInjection\AbstractServiceSubscriber;
  19. use WellCommerce\Bundle\CoreBundle\Service\Messenger\MessageInterface;
  20. /**
  21.  * Class AdminSubscriber
  22.  *
  23.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  24.  */
  25. class MessengerQueueSubscriber extends AbstractServiceSubscriber implements EventSubscriberInterface
  26. {
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             WorkerMessageHandledEvent::class => ['onWorkerMessageHandledEvent'0],
  31.             WorkerMessageFailedEvent::class  => ['onWorkerMessageFailedEvent'0],
  32.         ];
  33.     }
  34.     public function onWorkerMessageHandledEvent(WorkerMessageHandledEvent $event)
  35.     {
  36.         $env     $event->getEnvelope();
  37.         $message $env->getMessage();
  38.         if ($message instanceof MessageInterface) {
  39.             $this->registerMessengerQueue($message);
  40.         }
  41.     }
  42.     public function onWorkerMessageFailedEvent(WorkerMessageFailedEvent $event)
  43.     {
  44.         $env     $event->getEnvelope();
  45.         $message $env->getMessage();
  46.         if ($message instanceof MessageInterface) {
  47.             $this->registerMessengerQueue($message$event->getThrowable());
  48.         }
  49.     }
  50.     protected function registerMessengerQueue(MessageInterface $message, ?\Throwable $throwable null)
  51.     {
  52.         $queue = new MessengerQueue();
  53.         $queue->setType(get_class($message));
  54.         $queue->setIdentifier($message->getIdentifier());
  55.         $queue->setSuccess(true);
  56.         if ($throwable instanceof \Throwable) {
  57.             $queue->setSuccess(false);
  58.             $queue->setErrorMsg($throwable->getMessage());
  59.         }
  60.         $this->getEntityManager()->persist($queue);
  61.         $this->getEntityManager()->flush();
  62.     }
  63. }