Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@
use Symfony\Component\Messenger\Handler\BatchHandlerInterface;
use Symfony\Component\Messenger\MessageBus;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Middleware\AddDefaultStampsMiddleware;
use Symfony\Component\Messenger\Middleware\DeduplicateMiddleware;
use Symfony\Component\Messenger\Middleware\RouterContextMiddleware;
use Symfony\Component\Messenger\Transport\AmqpExt\AmqpTransportFactory;
Expand Down Expand Up @@ -2436,6 +2437,10 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
],
];

if (class_exists(AddDefaultStampsMiddleware::class)) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This check is needed for the test PHP 8.4 which is running on Symfony 6.4

array_unshift($defaultMiddleware['before'], ['id' => 'add_default_stamps_middleware']);
}

if ($lockEnabled && class_exists(DeduplicateMiddleware::class) && class_exists(LockFactory::class)) {
$defaultMiddleware['before'][] = ['id' => 'deduplicate_middleware'];
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener;
use Symfony\Component\Messenger\Handler\RedispatchMessageHandler;
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
use Symfony\Component\Messenger\Middleware\AddDefaultStampsMiddleware;
use Symfony\Component\Messenger\Middleware\DeduplicateMiddleware;
use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware;
use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware;
Expand Down Expand Up @@ -93,6 +94,8 @@
service('lock.factory'),
])

->set('messenger.middleware.add_default_stamps_middleware', AddDefaultStampsMiddleware::class)

->set('messenger.middleware.add_bus_name_stamp_middleware', AddBusNameStampMiddleware::class)
->abstract()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1090,6 +1090,7 @@ public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware()
$this->assertTrue($container->has('messenger.bus.commands'));
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
$this->assertEquals([
['id' => 'add_default_stamps_middleware'],
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
['id' => 'reject_redelivered_message_middleware'],
['id' => 'dispatch_after_current_bus'],
Expand All @@ -1100,6 +1101,7 @@ public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware()
$this->assertTrue($container->has('messenger.bus.events'));
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
$this->assertEquals([
['id' => 'add_default_stamps_middleware'],
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
['id' => 'reject_redelivered_message_middleware'],
['id' => 'dispatch_after_current_bus'],
Expand Down Expand Up @@ -1132,6 +1134,7 @@ public function testMessengerWithAddBusNameStampMiddleware()
$this->assertTrue($container->has('messenger.bus.events'));
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
$this->assertEquals([
['id' => 'add_default_stamps_middleware'],
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
['id' => 'reject_redelivered_message_middleware'],
['id' => 'dispatch_after_current_bus'],
Expand All @@ -1152,6 +1155,7 @@ public function testMessengerWithMultipleBusesWithDeduplicateMiddleware()
$this->assertTrue($container->has('messenger.bus.commands'));
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
$this->assertEquals([
['id' => 'add_default_stamps_middleware'],
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
['id' => 'reject_redelivered_message_middleware'],
['id' => 'dispatch_after_current_bus'],
Expand All @@ -1163,6 +1167,7 @@ public function testMessengerWithMultipleBusesWithDeduplicateMiddleware()
$this->assertTrue($container->has('messenger.bus.events'));
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
$this->assertEquals([
['id' => 'add_default_stamps_middleware'],
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
['id' => 'reject_redelivered_message_middleware'],
['id' => 'dispatch_after_current_bus'],
Expand Down
4 changes: 2 additions & 2 deletions src/Symfony/Bundle/FrameworkBundle/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"symfony/http-client": "^6.4|^7.0|^8.0",
"symfony/lock": "^6.4|^7.0|^8.0",
"symfony/mailer": "^6.4|^7.0|^8.0",
"symfony/messenger": "^6.4|^7.0|^8.0",
"symfony/messenger": "^7.4|^8.0",
"symfony/mime": "^6.4|^7.0|^8.0",
"symfony/notifier": "^6.4|^7.0|^8.0",
"symfony/object-mapper": "^7.3|^8.0",
Expand Down Expand Up @@ -93,7 +93,7 @@
"symfony/form": "<6.4",
"symfony/lock": "<6.4",
"symfony/mailer": "<6.4",
"symfony/messenger": "<6.4",
"symfony/messenger": "<7.4",
"symfony/mime": "<6.4",
"symfony/property-info": "<6.4",
"symfony/property-access": "<6.4",
Expand Down
1 change: 1 addition & 0 deletions src/Symfony/Component/Messenger/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ CHANGELOG

* Add `--exclude-receivers` option to the `messenger:consume command`
* Allow any `ServiceResetterInterface` implementation in `ResetServicesListener`
* Add `Symfony\Component\Messenger\Middleware\AddDefaultStampsMiddleware` and `Symfony\Component\Messenger\Message\DefaultStampsProviderInterface`

7.3
---
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Component\Messenger\Message;

use Symfony\Component\Messenger\Stamp\StampInterface;

interface DefaultStampsProviderInterface
{
/**
* List of stamps which will be automatically added to the envelope,
* if there is no other stamp of the same class already set.
*
* @return array<StampInterface>
*/
public function getDefaultStamps(): array;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Component\Messenger\Middleware;

use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Message\DefaultStampsProviderInterface;

/**
* Automatically add stamps from the DefaultStampsProviderInterface.
*/
class AddDefaultStampsMiddleware implements MiddlewareInterface
{
public function handle(Envelope $envelope, StackInterface $stack): Envelope
{
$message = $envelope->getMessage();
if ($message instanceof DefaultStampsProviderInterface) {
foreach ($message->getDefaultStamps() as $stamp) {
if (null === $envelope->last($stamp::class)) {
$envelope = $envelope->with($stamp);
}
}
}

return $stack->next()->handle($envelope, $stack);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Symfony\Component\Messenger\Tests\Fixtures;

use Symfony\Component\Messenger\Message\DefaultStampsProviderInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;

class DefaultStampsProviderDummyMessage implements DummyMessageInterface, DefaultStampsProviderInterface
{
public function __construct(private string $message)
{
}

public function getMessage(): string
{
return $this->message;
}

public function getDefaultStamps(): array
{
return [new DelayStamp(1)];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Component\Messenger\Tests\Middleware;

use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Middleware\AddDefaultStampsMiddleware;
use Symfony\Component\Messenger\Stamp\DelayStamp;
use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase;
use Symfony\Component\Messenger\Tests\Fixtures\DefaultStampsProviderDummyMessage;

final class AddDefaultStampsMiddlewareTest extends MiddlewareTestCase
{
public function testSelfStampableStampsMiddleware()
{
$message = new DefaultStampsProviderDummyMessage('');
$envelope = new Envelope($message);

$decorator = new AddDefaultStampsMiddleware();

$envelope = $decorator->handle($envelope, $this->getStackMock(true));

$delayStamp = $envelope->last(DelayStamp::class);
$this->assertNotNull($delayStamp);
$this->assertSame(1, $delayStamp->getDelay());
}

public function testSelfStampableStampsMiddlewareIfStampExists()
{
$message = new DefaultStampsProviderDummyMessage('');
$envelope = new Envelope($message, [new DelayStamp(5)]);

$decorator = new AddDefaultStampsMiddleware();

$envelope = $decorator->handle($envelope, $this->getStackMock(true));

$delayStamp = $envelope->last(DelayStamp::class);
$this->assertNotNull($delayStamp);
$this->assertSame(5, $delayStamp->getDelay());
}
}
Loading