Skip to content

Commit aaa2bfc

Browse files
Merge branch '5.4' into 6.0
* 5.4: [PropertyAccess] Fix Regression in PropertyAccessor::isWritable() [Mime] Allow array as input for RawMessage [Mesenger] Add support for resetting container services after each messenger message. [RateLimiter][Runtime][Translation] remove `@experimental` flag Reword return type deprecation message
2 parents fbf12f1 + daa4994 commit aaa2bfc

File tree

9 files changed

+33
-1
lines changed

9 files changed

+33
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ CHANGELOG
3030
* Deprecate `get()`, `has()`, `getDoctrine()`, and `dispatchMessage()` in `AbstractController`, use method/constructor injection instead
3131
* Add `MicroKernelTrait::getBundlesPath` method to get bundles config path
3232
* Deprecate the `cache.adapter.doctrine` service
33+
* Add support for resetting container services after each messenger message.
3334

3435
5.3
3536
---

DependencyInjection/Configuration.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1316,6 +1316,10 @@ function ($a) {
13161316
->fixXmlConfig('option')
13171317
->children()
13181318
->scalarNode('dsn')->end()
1319+
->booleanNode('reset_on_message')
1320+
->defaultFalse()
1321+
->info('Reset container services after each message. Turn it on when the transport is async and run in a worker.')
1322+
->end()
13191323
->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end()
13201324
->arrayNode('options')
13211325
->normalizeKeys(false)

DependencyInjection/FrameworkExtension.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
19331933

19341934
$senderAliases = [];
19351935
$transportRetryReferences = [];
1936+
$transportNamesForResetServices = [];
19361937
foreach ($config['transports'] as $name => $transport) {
19371938
$serializerId = $transport['serializer'] ?? 'messenger.default_serializer';
19381939
$transportDefinition = (new Definition(TransportInterface::class))
@@ -1961,6 +1962,18 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
19611962

19621963
$transportRetryReferences[$name] = new Reference($retryServiceId);
19631964
}
1965+
if ($transport['reset_on_message']) {
1966+
$transportNamesForResetServices[] = $name;
1967+
}
1968+
}
1969+
1970+
if ($transportNamesForResetServices) {
1971+
$container
1972+
->getDefinition('messenger.listener.reset_services')
1973+
->replaceArgument(1, $transportNamesForResetServices)
1974+
;
1975+
} else {
1976+
$container->removeDefinition('messenger.listener.reset_services');
19641977
}
19651978

19661979
$senderReferences = [];

Resources/config/messenger.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\Messenger\Bridge\Redis\Transport\RedisTransportFactory;
1919
use Symfony\Component\Messenger\EventListener\AddErrorDetailsStampListener;
2020
use Symfony\Component\Messenger\EventListener\DispatchPcntlSignalListener;
21+
use Symfony\Component\Messenger\EventListener\ResetServicesListener;
2122
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
2223
use Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener;
2324
use Symfony\Component\Messenger\EventListener\StopWorkerOnCustomStopExceptionListener;
@@ -195,6 +196,12 @@
195196
->tag('kernel.event_subscriber')
196197

197198
->set('messenger.listener.stop_worker_on_stop_exception_listener', StopWorkerOnCustomStopExceptionListener::class)
199+
200+
->set('messenger.listener.reset_services', ResetServicesListener::class)
201+
->args([
202+
service('services_resetter'),
203+
abstract_arg('receivers names'),
204+
])
198205
->tag('kernel.event_subscriber')
199206

200207
->set('messenger.routable_message_bus', RoutableMessageBus::class)

Resources/config/schema/symfony-1.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@
505505
<xsd:attribute name="serializer" type="xsd:string" />
506506
<xsd:attribute name="dsn" type="xsd:string" />
507507
<xsd:attribute name="failure-transport" type="xsd:string" />
508+
<xsd:attribute name="reset-on-message" type="xsd:boolean" />
508509
</xsd:complexType>
509510

510511
<xsd:complexType name="messenger_retry_strategy">

Tests/DependencyInjection/Fixtures/php/messenger_transports.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
'default' => 'amqp://localhost/%2f/messages',
1212
'customised' => [
1313
'dsn' => 'amqp://localhost/%2f/messages?exchange_name=exchange_name',
14+
'reset_on_message' => true,
1415
'options' => ['queue' => ['name' => 'Queue']],
1516
'serializer' => 'messenger.transport.native_php_serializer',
1617
'retry_strategy' => [

Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<framework:messenger failure-transport="failed">
1111
<framework:serializer default-serializer="messenger.transport.symfony_serializer" />
1212
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
13-
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name" serializer="messenger.transport.native_php_serializer">
13+
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name" serializer="messenger.transport.native_php_serializer" reset-on-message="true">
1414
<framework:options>
1515
<framework:queue>
1616
<framework:name>Queue</framework:name>

Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ framework:
88
default: 'amqp://localhost/%2f/messages'
99
customised:
1010
dsn: 'amqp://localhost/%2f/messages?exchange_name=exchange_name'
11+
reset_on_message: true
1112
options:
1213
queue:
1314
name: Queue

Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,7 @@ public function testMessenger()
694694
$this->assertTrue($container->hasDefinition('messenger.transport.redis.factory'));
695695
$this->assertTrue($container->hasDefinition('messenger.transport_factory'));
696696
$this->assertSame(TransportFactory::class, $container->getDefinition('messenger.transport_factory')->getClass());
697+
$this->assertFalse($container->hasDefinition('messenger.listener.reset_services'));
697698
}
698699

699700
public function testMessengerMultipleFailureTransports()
@@ -838,6 +839,9 @@ public function testMessengerTransports()
838839
return array_shift($values);
839840
}, $failureTransports);
840841
$this->assertEquals($expectedTransportsByFailureTransports, $failureTransportsReferences);
842+
843+
$this->assertTrue($container->hasDefinition('messenger.listener.reset_services'));
844+
$this->assertSame(['customised'], $container->getDefinition('messenger.listener.reset_services')->getArgument(1));
841845
}
842846

843847
public function testMessengerRouting()

0 commit comments

Comments
 (0)