diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php index caeaf3ce49194..fe0a8723a5446 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php @@ -24,6 +24,7 @@ use Symfony\Component\Messenger\EventListener\StopWorkerOnCustomStopExceptionListener; use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener; use Symfony\Component\Messenger\EventListener\StopWorkerOnSignalsListener; +use Symfony\Component\Messenger\Handler\RedispatchMessageHandler; use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware; use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware; use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware; @@ -219,5 +220,11 @@ abstract_arg('message bus locator'), service('messenger.default_bus'), ]) + + ->set('messenger.redispatch_message_handler', RedispatchMessageHandler::class) + ->args([ + service('messenger.default_bus'), + ]) + ->tag('messenger.message_handler') ; }; diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 8a16de384199c..2b02e2cc1c04a 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -14,6 +14,7 @@ CHANGELOG * Deprecate `StopWorkerOnSigtermSignalListener` in favor of `StopWorkerOnSignalsListener` and make it configurable with SIGINT and SIGTERM by default + * Add `RedispatchMessage` and `RedispatchMessageHandler` 6.2 --- diff --git a/src/Symfony/Component/Messenger/Handler/RedispatchMessageHandler.php b/src/Symfony/Component/Messenger/Handler/RedispatchMessageHandler.php new file mode 100644 index 0000000000000..e0b8bab956116 --- /dev/null +++ b/src/Symfony/Component/Messenger/Handler/RedispatchMessageHandler.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Handler; + +use Symfony\Component\Messenger\Message\RedispatchMessage; +use Symfony\Component\Messenger\MessageBusInterface; +use Symfony\Component\Messenger\Stamp\TransportNamesStamp; + +final class RedispatchMessageHandler +{ + public function __construct( + private MessageBusInterface $bus, + ) { + } + + public function __invoke(RedispatchMessage $message) + { + $this->bus->dispatch($message->envelope, [new TransportNamesStamp($message->transportNames)]); + } +} diff --git a/src/Symfony/Component/Messenger/Message/RedispatchMessage.php b/src/Symfony/Component/Messenger/Message/RedispatchMessage.php new file mode 100644 index 0000000000000..6a6b8056ab3aa --- /dev/null +++ b/src/Symfony/Component/Messenger/Message/RedispatchMessage.php @@ -0,0 +1,30 @@ + + * + * 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\Envelope; + +/** + * @internal + */ +final class RedispatchMessage +{ + /** + * @param object|Envelope $message The message or the message pre-wrapped in an envelope + * @param string[]|string $transportNames Transport names to be used for the message + */ + public function __construct( + public readonly object $envelope, + public readonly array|string $transportNames = [], + ) { + } +}