vendor/3slab/vdm-library-bundle/EventSubscriber/StopWorker/StopWorkerAfterHandleStampSubscriber.php line 76

Open in your IDE?
  1. <?php
  2. /**
  3.  * @package    3slab/VdmLibraryBundle
  4.  * @copyright  2020 Suez Smart Solutions 3S.lab
  5.  * @license    https://github.com/3slab/VdmLibraryBundle/blob/master/LICENSE
  6.  */
  7. namespace Vdm\Bundle\LibraryBundle\EventSubscriber\StopWorker;
  8. use Psr\Log\LoggerInterface;
  9. use Psr\Log\NullLogger;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Messenger\Event\AbstractWorkerMessageEvent;
  12. use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
  13. use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent;
  14. use Vdm\Bundle\LibraryBundle\Event\CollectWorkerMessageFailedEvent;
  15. use Vdm\Bundle\LibraryBundle\Event\CollectWorkerMessageHandledEvent;
  16. use Vdm\Bundle\LibraryBundle\Service\StopWorkerService;
  17. use Vdm\Bundle\LibraryBundle\Stamp\StopAfterHandleStamp;
  18. /**
  19.  * Class StopWorkerAfterHandleStampSubscriber
  20.  *
  21.  * @package Vdm\Bundle\LibraryBundle\EventSubscriber\StopWorker
  22.  */
  23. class StopWorkerAfterHandleStampSubscriber implements EventSubscriberInterface
  24. {
  25.     /**
  26.      * @var StopWorkerService $stopWorker
  27.      */
  28.     private $stopWorker;
  29.     /**
  30.      * @var LoggerInterface
  31.      */
  32.     private $logger;
  33.     /**
  34.      * StopWorkerAfterHandleStampSubscriber constructor.
  35.      *
  36.      * @param StopWorkerService $stopWorker
  37.      * @param LoggerInterface|null $vdmLogger
  38.      */
  39.     public function __construct(StopWorkerService $stopWorkerLoggerInterface $vdmLogger null)
  40.     {
  41.         $this->stopWorker $stopWorker;
  42.         $this->logger $vdmLogger ?? new NullLogger();
  43.     }
  44.     /**
  45.      * Method executed on WorkerMessageFailedEvent event
  46.      *
  47.      * @param WorkerMessageFailedEvent $event
  48.      */
  49.     public function onWorkerMessageFailedEvent(WorkerMessageFailedEvent $event)
  50.     {
  51.         $this->hasStopAfterHandlerStamp($event'WorkerMessageFailedEvent');
  52.     }
  53.     /**
  54.      * Method executed on WorkerMessageHandledEvent event
  55.      *
  56.      * @param WorkerMessageHandledEvent $event
  57.      */
  58.     public function onWorkerMessageHandledEvent(WorkerMessageHandledEvent $event)
  59.     {
  60.         $this->hasStopAfterHandlerStamp($event'WorkerMessageHandledEvent');
  61.     }
  62.     /**
  63.      * Method executed on CollectWorkerMessageFailedEvent event
  64.      *
  65.      * @param CollectWorkerMessageFailedEvent $event
  66.      */
  67.     public function onCollectWorkerMessageFailedEvent(CollectWorkerMessageFailedEvent $event)
  68.     {
  69.         $this->hasStopAfterHandlerStamp($event'CollectWorkerMessageFailedEvent');
  70.     }
  71.     /**
  72.      * Method executed on CollectWorkerMessageHandledEvent event
  73.      *
  74.      * @param CollectWorkerMessageHandledEvent $event
  75.      */
  76.     public function onCollectWorkerMessageHandledEvent(CollectWorkerMessageHandledEvent $event)
  77.     {
  78.         $this->hasStopAfterHandlerStamp($event'CollectWorkerMessageHandledEvent');
  79.     }
  80.     /**
  81.      * @param AbstractWorkerMessageEvent $event
  82.      * @param string $eventName
  83.      */
  84.     protected function hasStopAfterHandlerStamp(AbstractWorkerMessageEvent $eventstring $eventName)
  85.     {
  86.         $stamps $event->getEnvelope()->all();
  87.         if (in_array(StopAfterHandleStamp::class, array_keys($stamps))) {
  88.             $this->logger->debug(
  89.                 'StopAfterHandleStamp detected on envelop during event {eventName} so we schedule to stop the worker',
  90.                 ['eventName' => $eventName]
  91.             );
  92.             $this->stopWorker->setFlag(true);
  93.         }
  94.     }
  95.     /**
  96.      * {@inheritDoc}
  97.      * @codeCoverageIgnore
  98.      */
  99.     public static function getSubscribedEvents(): array
  100.     {
  101.         return [
  102.             CollectWorkerMessageFailedEvent::class => 'onCollectWorkerMessageFailedEvent',
  103.             CollectWorkerMessageHandledEvent::class => 'onCollectWorkerMessageHandledEvent',
  104.             WorkerMessageFailedEvent::class => 'onWorkerMessageFailedEvent',
  105.             WorkerMessageHandledEvent::class => 'onWorkerMessageHandledEvent',
  106.         ];
  107.     }
  108. }