Skip to content

Commit 52e76f0

Browse files
feature #29006 [Messenger] make TraceableMiddleware decorate a StackInterface instead of each middleware to free the callstack from noisy frames (nicolas-grekas)
This PR was merged into the 4.2-dev branch. Discussion ---------- [Messenger] make TraceableMiddleware decorate a StackInterface instead of each middleware to free the callstack from noisy frames | Q | A | ------------- | --- | Branch? | 4.2 | Bug fix? | no | New feature? | no | BC breaks? | yes | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - Right now, `TraceableMiddleware` works as a middleware decorator for the "handle" method. It means that *each middleware* frame in the call stack is wrapped between two noisy extra frames. This is something we can remove by decorating the StackInterface instead: let's just stop/start events when the next middleware is fetched. Thanks to this, only one frame *per bus* is added to measure middleware timings. Commits ------- 73c8c23c79 [Messenger] make TraceableMiddleware decorate a StackInterface instead of each middleware to free the callstack from noisy frames
2 parents 3fc85d5 + f2d223e commit 52e76f0

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1542,11 +1542,15 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
15421542
}
15431543

15441544
foreach ($middleware as $middlewareItem) {
1545-
if (!$validationConfig['enabled'] && 'messenger.middleware.validation' === $middlewareItem['id']) {
1545+
if (!$validationConfig['enabled'] && \in_array($middlewareItem['id'], array('validation', 'messenger.middleware.validation'), true)) {
15461546
throw new LogicException('The Validation middleware is only available when the Validator component is installed and enabled. Try running "composer require symfony/validator".');
15471547
}
15481548
}
15491549

1550+
if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class)) {
1551+
array_unshift($middleware, array('id' => 'traceable', 'arguments' => array($busId)));
1552+
}
1553+
15501554
$container->setParameter($busId.'.middleware', $middleware);
15511555
$container->register($busId, MessageBus::class)->addArgument(array())->addTag('messenger.bus');
15521556

Resources/config/messenger.xml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,14 @@
3333
<argument type="service" id="validator" />
3434
</service>
3535

36+
<service id="messenger.middleware.traceable" class="Symfony\Component\Messenger\Middleware\TraceableMiddleware" abstract="true">
37+
<argument type="service" id="debug.stopwatch" />
38+
</service>
39+
3640
<!-- Logging -->
3741
<service id="messenger.middleware.logging" class="Symfony\Component\Messenger\Middleware\LoggingMiddleware" abstract="true">
38-
<argument type="service" id="logger" />
39-
4042
<tag name="monolog.logger" channel="messenger" />
43+
<argument type="service" id="logger" />
4144
</service>
4245

4346
<!-- Discovery -->
@@ -56,10 +59,9 @@
5659
</service>
5760

5861
<service id="messenger.transport.amqp.factory" class="Symfony\Component\Messenger\Transport\AmqpExt\AmqpTransportFactory">
62+
<tag name="messenger.transport_factory" />
5963
<argument type="service" id="messenger.transport.serializer" />
6064
<argument>%kernel.debug%</argument>
61-
62-
<tag name="messenger.transport_factory" />
6365
</service>
6466
</services>
6567
</container>

0 commit comments

Comments
 (0)