Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6430e04

Browse files
committed
[Messenger] make StopWorkerOnSignalsListener listen by default on SIGTERM and SIGINT
1 parent f4fe1c1 commit 6430e04

File tree

5 files changed

+90
-33
lines changed

5 files changed

+90
-33
lines changed

UPGRADE-6.3.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ Messenger
6565
`Symfony\Component\Messenger\Transport\InMemoryTransportFactory` in favor of
6666
`Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport` and
6767
`Symfony\Component\Messenger\Transport\InMemory\InMemoryTransportFactory`
68+
* Deprecate `StopWorkerOnSigtermSignalListener` in favor of `StopWorkerOnSignalsListener`
6869

6970
Notifier
7071
--------

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener;
2424
use Symfony\Component\Messenger\EventListener\StopWorkerOnCustomStopExceptionListener;
2525
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
26+
use Symfony\Component\Messenger\EventListener\StopWorkerOnSignalsListener;
2627
use Symfony\Component\Messenger\EventListener\StopWorkerOnSigtermSignalListener;
2728
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
2829
use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware;
@@ -45,7 +46,8 @@
4546
use Symfony\Component\Messenger\Transport\TransportFactory;
4647

4748
return static function (ContainerConfigurator $container) {
48-
$container->services()
49+
$services = $container->services();
50+
$services
4951
->alias(SerializerInterface::class, 'messenger.default_serializer')
5052

5153
// Asynchronous
@@ -198,12 +200,6 @@
198200
->tag('kernel.event_subscriber')
199201
->tag('monolog.logger', ['channel' => 'messenger'])
200202

201-
->set('messenger.listener.stop_worker_on_sigterm_signal_listener', StopWorkerOnSigtermSignalListener::class)
202-
->args([
203-
service('logger')->ignoreOnInvalid(),
204-
])
205-
->tag('kernel.event_subscriber')
206-
207203
->set('messenger.listener.stop_worker_on_stop_exception_listener', StopWorkerOnCustomStopExceptionListener::class)
208204
->tag('kernel.event_subscriber')
209205

@@ -218,4 +214,24 @@
218214
service('messenger.default_bus'),
219215
])
220216
;
217+
218+
if (class_exists(StopWorkerOnSignalsListener::class)) {
219+
$services
220+
->set('messenger.listener.stop_worker_signals_listener', StopWorkerOnSignalsListener::class)
221+
->args([
222+
null,
223+
service('logger')->ignoreOnInvalid(),
224+
])
225+
->tag('kernel.event_subscriber')
226+
;
227+
} else {
228+
// BC layer for symfony/messenger < 5.3
229+
$services
230+
->set('messenger.listener.stop_worker_on_sigterm_signal_listener', StopWorkerOnSigtermSignalListener::class)
231+
->args([
232+
service('logger')->ignoreOnInvalid(),
233+
])
234+
->tag('kernel.event_subscriber')
235+
;
236+
}
221237
};

src/Symfony/Component/Messenger/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ CHANGELOG
1111
`Symfony\Component\Messenger\Transport\InMemory\InMemoryTransportFactory`
1212
* Allow passing a string instead of an array in `TransportNamesStamp`
1313
* Allow to define batch size when using `BatchHandlerTrait` with `getBatchSize()`
14+
* Deprecate `StopWorkerOnSigtermSignalListener` in favor of
15+
`StopWorkerOnSignalsListener` and make it configurable with SIGINT and
16+
SIGTERM by default
1417

1518
6.2
1619
---
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
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\EventListener;
13+
14+
use Psr\Log\LoggerInterface;
15+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
16+
use Symfony\Component\Messenger\Event\WorkerStartedEvent;
17+
18+
/**
19+
* @author Tobias Schultze <http://tobion.de>
20+
* @author Grégoire Pineau <[email protected]>
21+
*/
22+
class StopWorkerOnSignalsListener implements EventSubscriberInterface
23+
{
24+
private array $signals;
25+
private ?LoggerInterface $logger;
26+
27+
public function __construct(array $signals = null, LoggerInterface $logger = null)
28+
{
29+
if (null === $signals && \defined('SIGTERM')) {
30+
$signals = [SIGTERM, SIGINT];
31+
}
32+
$this->signals = $signals;
33+
$this->logger = $logger;
34+
}
35+
36+
public function onWorkerStarted(WorkerStartedEvent $event): void
37+
{
38+
foreach ($this->signals as $signal) {
39+
pcntl_signal($signal, function () use ($event, $signal) {
40+
$this->logger?->info('Received signal {signal}.', ['signal' => $signal, 'transport_names' => $event->getWorker()->getMetadata()->getTransportNames()]);
41+
42+
$event->getWorker()->stop();
43+
});
44+
}
45+
}
46+
47+
public static function getSubscribedEvents(): array
48+
{
49+
if (!\function_exists('pcntl_signal')) {
50+
return [];
51+
}
52+
53+
return [
54+
WorkerStartedEvent::class => ['onWorkerStarted', 100],
55+
];
56+
}
57+
}

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

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,19 @@
1111

1212
namespace Symfony\Component\Messenger\EventListener;
1313

14+
trigger_deprecation('symfony/messenger', '6.3', '"%s" is deprecated, use "%s" instead.', StopWorkerOnSigtermSignalListener::class, StopWorkerOnSignalsListener::class);
15+
1416
use Psr\Log\LoggerInterface;
15-
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
16-
use Symfony\Component\Messenger\Event\WorkerStartedEvent;
1717

1818
/**
1919
* @author Tobias Schultze <http://tobion.de>
20+
*
21+
* @deprecated since Symfony 6.3, use the StopWorkerOnSignalsListener instead
2022
*/
21-
class StopWorkerOnSigtermSignalListener implements EventSubscriberInterface
23+
class StopWorkerOnSigtermSignalListener extends StopWorkerOnSignalsListener
2224
{
23-
private ?LoggerInterface $logger;
24-
2525
public function __construct(LoggerInterface $logger = null)
2626
{
27-
$this->logger = $logger;
28-
}
29-
30-
public function onWorkerStarted(WorkerStartedEvent $event): void
31-
{
32-
pcntl_signal(\SIGTERM, function () use ($event) {
33-
$this->logger?->info('Received SIGTERM signal.', ['transport_names' => $event->getWorker()->getMetadata()->getTransportNames()]);
34-
35-
$event->getWorker()->stop();
36-
});
37-
}
38-
39-
public static function getSubscribedEvents(): array
40-
{
41-
if (!\function_exists('pcntl_signal')) {
42-
return [];
43-
}
44-
45-
return [
46-
WorkerStartedEvent::class => ['onWorkerStarted', 100],
47-
];
27+
parent::__construct([SIGTERM], $logger);
4828
}
4929
}

0 commit comments

Comments
 (0)