8000 feature #49539 [Messenger] make StopWorkerOnSignalsListener listen by… · symfony/symfony@550b92f · GitHub
[go: up one dir, main page]

Skip to content

Commit 550b92f

Browse files
committed
feature #49539 [Messenger] make StopWorkerOnSignalsListener listen by default on SIGTERM and SIGINT (lyrixx)
This PR was merged into the 6.3 branch. Discussion ---------- [Messenger] make StopWorkerOnSignalsListener listen by default on SIGTERM and SIGINT | Q | A | ------------- | --- | Branch? | 6.3 | Bug fix? | no | New feature? | yes | Deprecations? | yes | Tickets | Fix #49156 | License | MIT | Doc PR | no need I guess Commits ------- 9415b43 [Messenger] make StopWorkerOnSignalsListener listen by default on SIGTERM and SIGINT
2 parents 9b68d8e + 9415b43 commit 550b92f

File tree

5 files changed

+70
-28
lines changed

5 files changed

+70
-28
lines changed

UPGRADE-6.3.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ Messenger
7373
`Symfony\Component\Messenger\Transport\InMemoryTransportFactory` in favor of
7474
`Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport` and
7575
`Symfony\Component\Messenger\Transport\InMemory\InMemoryTransportFactory`
76+
* Deprecate `StopWorkerOnSigtermSignalListener` in favor of `StopWorkerOnSignalsListener`
7677

7778
Notifier
7879
--------

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +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\StopWorkerOnSigtermSignalListener;
26+
use Symfony\Component\Messenger\EventListener\StopWorkerOnSignalsListener;
2727
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
2828
use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware;
2929
use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware;
@@ -198,8 +198,9 @@
198198
->tag('kernel.event_subscriber')
199199
->tag('monolog.logger', ['channel' => 'messenger'])
200200

201-
->set('messenger.listener.stop_worker_on_sigterm_signal_listener', StopWorkerOnSigtermSignalListener::class)
201+
->set('messenger.listener.stop_worker_signals_listener', StopWorkerOnSignalsListener::class)
202202
->args([
203+
null,
203204
service('logger')->ignoreOnInvalid(),
204205
])
205206
->tag('kernel.event_subscriber')

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 <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\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 <lyrixx@lyrixx.info>
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)
0