<?php
/**
* Guidance Magento Team <magento@guidance.com>
* Copyright (c) 2021 Guidance Solutions (http://www.guidance.com)
*/
namespace App\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
class StopWorkerIfEntityManagerIsClosed implements EventSubscriberInterface
{
protected EntityManagerInterface $entityManager;
protected LoggerInterface $logger;
public function __construct(EntityManagerInterface $entityManager, LoggerInterface $logger)
{
$this->entityManager = $entityManager;
$this->logger = $logger;
}
public static function getSubscribedEvents()
{
return [
WorkerRunningEvent::class => ['onWorkerRunning', 0],
];
}
public function onWorkerRunning(WorkerRunningEvent $event)
{
if (!$this->entityManager->isOpen()) {
$event->getWorker()->stop();
$this->logger->info('Worker stopped because Doctrine Entity Manager is closed.');
}
}
}