diff --git a/src/Listener/Symfony/MessengerListener.php b/src/Listener/Symfony/MessengerListener.php index efabce6..d99216c 100644 --- a/src/Listener/Symfony/MessengerListener.php +++ b/src/Listener/Symfony/MessengerListener.php @@ -5,6 +5,7 @@ use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent; +use Symfony\Component\Messenger\Message\RedispatchMessage; use Yousign\ZddMessageBundle\Config\ZddMessageConfigInterface; final class MessengerListener implements EventSubscriberInterface @@ -24,6 +25,10 @@ public function onMessageReceived(WorkerMessageReceivedEvent $event): void if (method_exists($message, 'getMessage')) { $message = $message->getMessage(); } + // Do not check RedispatchMessage as it's just a wrapper around the real message that will come back here later. + if (class_exists(RedispatchMessage::class) && $message instanceof RedispatchMessage) { + return; + } if (is_object($message) && !in_array($class = get_class($message), $this->config->getMessageToAssert(), true)) { $this->logger->log( diff --git a/src/Serializer/ZddMessageMessengerSerializer.php b/src/Serializer/ZddMessageMessengerSerializer.php index 36e9ae4..3f3047b 100644 --- a/src/Serializer/ZddMessageMessengerSerializer.php +++ b/src/Serializer/ZddMessageMessengerSerializer.php @@ -21,6 +21,7 @@ public function serialize(object $data): string public function deserialize(string $data): object { + /** @var array{body: string, headers?: array} $dataArray */ $dataArray = \json_decode($data, true, 512, \JSON_THROW_ON_ERROR); if (!\is_array($dataArray)) { throw new \InvalidArgumentException(sprintf('Array expected, %s provided', \gettype($data))); diff --git a/tests/Unit/Listener/Symfony/MessengerListenerTest.php b/tests/Unit/Listener/Symfony/MessengerListenerTest.php index 6aff306..f842bbd 100644 --- a/tests/Unit/Listener/Symfony/MessengerListenerTest.php +++ b/tests/Unit/Listener/Symfony/MessengerListenerTest.php @@ -5,6 +5,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent; +use Symfony\Component\Messenger\Message\RedispatchMessage; use Yousign\ZddMessageBundle\Listener\Symfony\MessengerListener; use Yousign\ZddMessageBundle\Tests\Fixtures\App\Logger\SpyLogger; use Yousign\ZddMessageBundle\Tests\Fixtures\App\Messages\Config\MessageConfig; @@ -36,6 +37,12 @@ public function provideTrackedMessages(): iterable yield DummyMessageWithNullableNumberProperty::class => [ new DummyMessageWithNullableNumberProperty('Hello World'), ]; + + if (class_exists(RedispatchMessage::class)) { + yield RedispatchMessage::class => [ + new RedispatchMessage(new DummyMessage('Hello World'), 'new_transport'), + ]; + } } /**