Skip to content

Commit e0426e5

Browse files
committed
separate WorkerRunningEvent into WorkerBusyEvent and WorkerIdleEvent for dedicated listeners
1 parent c715b55 commit e0426e5

15 files changed

+105
-45
lines changed

src/Symfony/Component/Messenger/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ CHANGELOG
3232
* Add `WrappedExceptionsInterface` interface for exceptions that hold multiple individual exceptions
3333
* Deprecate `HandlerFailedException::getNestedExceptions()`, `HandlerFailedException::getNestedExceptionsOfClass()`
3434
and `DelayedMessageHandlingException::getExceptions()` which are replaced by a new `getWrappedExceptions()` method
35+
* Separate `WorkerRunningEvent` into `WorkerBusyEvent` and `WorkerIdleEvent`
3536

3637
6.3
3738
---
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Messenger\Event;
13+
14+
use Symfony\Component\Messenger\Worker;
15+
16+
/**
17+
* Dispatched after the worker processed a message.
18+
*
19+
* @author Jeroen Spee <https://github.com/Jeroeny>
20+
*/
21+
final class WorkerBusyEvent extends WorkerRunningEvent
22+
{
23+
public function __construct(Worker $worker)
24+
{
25+
parent::__construct($worker, false);
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Messenger\Event;
13+
14+
use Symfony\Component\Messenger\Worker;
15+
16+
/**
17+
* Dispatched after the worker didn't receive any message from its receivers.
18+
*
19+
* @author Jeroen Spee <https://github.com/Jeroeny>
20+
*/
21+
final class WorkerIdleEvent extends WorkerRunningEvent
22+
{
23+
public function __construct(Worker $worker)
24+
{
25+
parent::__construct($worker, true);
26+
}
27+
}

src/Symfony/Component/Messenger/Event/WorkerRunningEvent.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
use Symfony\Component\Messenger\Worker;
1515

1616
/**
17-
* Dispatched after the worker processed a message or didn't receive a message at all.
17+
* Events that are dispatched after the worker processed a message or didn't receive a message at all.
1818
*
1919
* @author Tobias Schultze <http://tobion.de>
2020
*/
21-
final class WorkerRunningEvent
21+
class WorkerRunningEvent
2222
{
2323
private Worker $worker;
2424
private bool $isWorkerIdle;

src/Symfony/Component/Messenger/EventListener/ResetServicesListener.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1515
use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
16-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
16+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1717
use Symfony\Component\Messenger\Event\WorkerStoppedEvent;
1818

1919
/**
@@ -28,11 +28,9 @@ public function __construct(ServicesResetter $servicesResetter)
2828
$this->servicesResetter = $servicesResetter;
2929
}
3030

31-
public function resetServices(WorkerRunningEvent $event): void
31+
public function resetServices(WorkerBusyEvent $event): void
3232
{
33-
if (!$event->isWorkerIdle()) {
34-
$this->servicesResetter->reset();
35-
}
33+
$this->servicesResetter->reset();
3634
}
3735

3836
public function resetServicesAtStop(WorkerStoppedEvent $event): void
@@ -43,7 +41,7 @@ public function resetServicesAtStop(WorkerStoppedEvent $event): void
4341
public static function getSubscribedEvents(): array
4442
{
4543
return [
46-
WorkerRunningEvent::class => ['resetServices', -1024],
44+
WorkerBusyEvent::class => ['resetServices', -1024],
4745
WorkerStoppedEvent::class => ['resetServicesAtStop', -1024],
4846
];
4947
}

src/Symfony/Component/Messenger/EventListener/StopWorkerOnFailureLimitListener.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313

1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
16+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1617
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
17-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
1818
use Symfony\Component\Messenger\Exception\InvalidArgumentException;
1919

2020
/**
@@ -41,9 +41,9 @@ public function onMessageFailed(WorkerMessageFailedEvent $event): void
4141
++$this->failedMessages;
4242
}
4343

44-
public function onWorkerRunning(WorkerRunningEvent $event): void
44+
public function onWorkerBusy(WorkerBusyEvent $event): void
4545
{
46-
if (!$event->isWorkerIdle() && $this->failedMessages >= $this->maximumNumberOfFailures) {
46+
if ($this->failedMessages >= $this->maximumNumberOfFailures) {
4747
$this->failedMessages = 0;
4848
$event->getWorker()->stop();
4949

@@ -55,7 +55,7 @@ public static function getSubscribedEvents(): array
5555
{
5656
return [
5757
WorkerMessageFailedEvent::class => 'onMessageFailed',
58-
WorkerRunningEvent::class => 'onWorkerRunning',
58+
WorkerBusyEvent::class => 'onWorkerBusy',
5959
];
6060
}
6161
}

src/Symfony/Component/Messenger/EventListener/StopWorkerOnMessageLimitListener.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
16-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
16+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1717
use Symfony\Component\Messenger\Exception\InvalidArgumentException;
1818

1919
/**
@@ -36,9 +36,9 @@ public function __construct(int $maximumNumberOfMessages, LoggerInterface $logge
3636
}
3737
}
3838

39-
public function onWorkerRunning(WorkerRunningEvent $event): void
39+
public function onWorkerBusy(WorkerBusyEvent $event): void
4040
{
41-
if (!$event->isWorkerIdle() && ++$this->receivedMessages >= $this->maximumNumberOfMessages) {
41+
if (++$this->receivedMessages >= $this->maximumNumberOfMessages) {
4242
$this->receivedMessages = 0;
4343
$event->getWorker()->stop();
4444

@@ -49,7 +49,7 @@ public function onWorkerRunning(WorkerRunningEvent $event): void
4949
public static function getSubscribedEvents(): array
5050
{
5151
return [
52-
WorkerRunningEvent::class => 'onWorkerRunning',
52+
WorkerBusyEvent::class => 'onWorkerBusy',
5353
];
5454
}
5555
}

src/Symfony/Component/Messenger/Tests/EventListener/StopWorkerOnCustomStopExceptionListenerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Messenger\Envelope;
16+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1617
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
17-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
1818
use Symfony\Component\Messenger\EventListener\StopWorkerOnCustomStopExceptionListener;
1919
use Symfony\Component\Messenger\Exception\HandlerFailedException;
2020
use Symfony\Component\Messenger\Exception\StopWorkerException;
@@ -50,7 +50,7 @@ public function test(\Throwable $throwable, bool $shouldStop)
5050

5151
$worker = $this->createMock(Worker::class);
5252
$worker->expects($shouldStop ? $this->once() : $this->never())->method('stop');
53-
$runningEvent = new WorkerRunningEvent($worker, false);
53+
$runningEvent = new WorkerBusyEvent($worker);
5454

5555
$listener->onWorkerRunning($runningEvent);
5656
}

src/Symfony/Component/Messenger/Tests/EventListener/StopWorkerOnFailureLimitListenerTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Log\LoggerInterface;
1616
use Symfony\Component\Messenger\Envelope;
17+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1718
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
18-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
1919
use Symfony\Component\Messenger\EventListener\StopWorkerOnFailureLimitListener;
2020
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
2121
use Symfony\Component\Messenger\Worker;
@@ -31,17 +31,17 @@ public function testWorkerStopsWhenMaximumCountReached(int $max, bool $shouldSto
3131
$worker->expects($shouldStop ? $this->atLeastOnce() : $this->never())->method('stop');
3232

3333
$failedEvent = $this->createFailedEvent();
34-
$runningEvent = new WorkerRunningEvent($worker, false);
34+
$runningEvent = new WorkerBusyEvent($worker);
3535

3636
$failureLimitListener = new StopWorkerOnFailureLimitListener($max);
3737
// simulate three messages (of which 2 failed)
3838
$failureLimitListener->onMessageFailed($failedEvent);
39-
$failureLimitListener->onWorkerRunning($runningEvent);
39+
$failureLimitListener->onWorkerBusy($runningEvent);
4040

41-
$failureLimitListener->onWorkerRunning($runningEvent);
41+
$failureLimitListener->onWorkerBusy($runningEvent);
4242

4343
$failureLimitListener->onMessageFailed($failedEvent);
44-
$failureLimitListener->onWorkerRunning($runningEvent);
44+
$failureLimitListener->onWorkerBusy($runningEvent);
4545
}
4646

4747
public static function countProvider(): iterable
@@ -62,11 +62,11 @@ public function testWorkerLogsMaximumCountReachedWhenLoggerIsGiven()
6262
);
6363

6464
$worker = $this->createMock(Worker::class);
65-
$event = new WorkerRunningEvent($worker, false);
65+
$event = new WorkerBusyEvent($worker);
6666

6767
$failureLimitListener = new StopWorkerOnFailureLimitListener(1, $logger);
6868
$failureLimitListener->onMessageFailed($this->createFailedEvent());
69-
$failureLimitListener->onWorkerRunning($event);
69+
$failureLimitListener->onWorkerBusy($event);
7070
}
7171

7272
private function createFailedEvent(): WorkerMessageFailedEvent

src/Symfony/Component/Messenger/Tests/EventListener/StopWorkerOnMemoryLimitListenerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Log\LoggerInterface;
16-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
16+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1717
use Symfony\Component\Messenger\EventListener\StopWorkerOnMemoryLimitListener;
1818
use Symfony\Component\Messenger\Worker;
1919

@@ -28,7 +28,7 @@ public function testWorkerStopsWhenMemoryLimitExceeded(int $memoryUsage, int $me
2828

2929
$worker = $this->createMock(Worker::class);
3030
$worker->expects($shouldStop ? $this->once() : $this->never())->method('stop');
31-
$event = new WorkerRunningEvent($worker, false);
31+
$event = new WorkerBusyEvent($worker);
3232

3333
$memoryLimitListener = new StopWorkerOnMemoryLimitListener($memoryLimit, null, $memoryResolver);
3434
$memoryLimitListener->onWorkerRunning($event);
@@ -50,7 +50,7 @@ public function testWorkerLogsMemoryExceededWhenLoggerIsGiven()
5050
$memoryResolver = fn () => 70;
5151

5252
$worker = $this->createMock(Worker::class);
53-
$event = new WorkerRunningEvent($worker, false);
53+
$event = new WorkerBusyEvent($worker);
5454

5555
$memoryLimitListener = new StopWorkerOnMemoryLimitListener(64, $logger, $memoryResolver);
5656
$memoryLimitListener->onWorkerRunning($event);

src/Symfony/Component/Messenger/Tests/EventListener/StopWorkerOnMessageLimitListenerTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Log\LoggerInterface;
16-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
16+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1717
use Symfony\Component\Messenger\EventListener\StopWorkerOnMessageLimitListener;
1818
use Symfony\Component\Messenger\Worker;
1919

@@ -26,13 +26,13 @@ public function testWorkerStopsWhenMaximumCountExceeded(int $max, bool $shouldSt
2626
{
2727
$worker = $this->createMock(Worker::class);
2828
$worker->expects($shouldStop ? $this->atLeastOnce() : $this->never())->method('stop');
29-
$event = new WorkerRunningEvent($worker, false);
29+
$event = new WorkerBusyEvent($worker);
3030

3131
$maximumCountListener = new StopWorkerOnMessageLimitListener($max);
3232
// simulate three messages processed
33-
$maximumCountListener->onWorkerRunning($event);
34-
$maximumCountListener->onWorkerRunning($event);
35-
$maximumCountListener->onWorkerRunning($event);
33+
$maximumCountListener->onWorkerBusy($event);
34+
$maximumCountListener->onWorkerBusy($event);
35+
$maximumCountListener->onWorkerBusy($event);
3636
}
3737

3838
public static function countProvider(): iterable
@@ -53,9 +53,9 @@ public function testWorkerLogsMaximumCountExceededWhenLoggerIsGiven()
5353
);
5454

5555
$worker = $this->createMock(Worker::class);
56-
$event = new WorkerRunningEvent($worker, false);
56+
$event = new WorkerBusyEvent($worker);
5757

5858
$maximumCountListener = new StopWorkerOnMessageLimitListener(1, $logger);
59-
$maximumCountListener->onWorkerRunning($event);
59+
$maximumCountListener->onWorkerBusy($event);
6060
}
6161
}

src/Symfony/Component/Messenger/Tests/EventListener/StopWorkerOnRestartSignalListenerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Cache\CacheItemInterface;
1616
use Psr\Cache\CacheItemPoolInterface;
17-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
17+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1818
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
1919
use Symfony\Component\Messenger\Worker;
2020

@@ -36,7 +36,7 @@ public function testWorkerStopsWhenMemoryLimitExceeded(?int $lastRestartTimeOffs
3636

3737
$worker = $this->createMock(Worker::class);
3838
$worker->expects($shouldStop ? $this->once() : $this->never())->method('stop');
39-
$event = new WorkerRunningEvent($worker, false);
39+
$event = new WorkerBusyEvent($worker);
4040

4141
$stopOnSignalListener = new StopWorkerOnRestartSignalListener($cachePool);
4242
$stopOnSignalListener->onWorkerStarted();
@@ -60,7 +60,7 @@ public function testWorkerDoesNotStopIfRestartNotInCache()
6060

6161
$worker = $this->createMock(Worker::class);
6262
$worker->expects($this->never())->method('stop');
63-
$event = new WorkerRunningEvent($worker, false);
63+
$event = new WorkerBusyEvent($worker);
6464

6565
$stopOnSignalListener = new StopWorkerOnRestartSignalListener($cachePool);
6666
$stopOnSignalListener->onWorkerStarted();

src/Symfony/Component/Messenger/Tests/EventListener/StopWorkerOnTimeLimitListenerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Log\LoggerInterface;
16-
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
16+
use Symfony\Component\Messenger\Event\WorkerBusyEvent;
1717
use Symfony\Component\Messenger\EventListener\StopWorkerOnTimeLimitListener;
1818
use Symfony\Component\Messenger\Worker;
1919

@@ -30,7 +30,7 @@ public function testWorkerStopsWhenTimeLimitIsReached()
3030

3131
$worker = $this->createMock(Worker::class);
3232
$worker->expects($this->once())->method('stop');
33-
$event = new WorkerRunningEvent($worker, false);
33+
$event = new WorkerBusyEvent($worker);
3434

3535
$timeoutListener = new StopWorkerOnTimeLimitListener(1, $logger);
3636
$timeoutListener->onWorkerStarted();

0 commit comments

Comments
 (0)