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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy