Skip to content

Commit a1a6e79

Browse files
Simplify
1 parent 48b3af7 commit a1a6e79

File tree

10 files changed

+39
-150
lines changed

10 files changed

+39
-150
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

+1-6
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
use Symfony\Component\Lock\Lock;
3333
use Symfony\Component\Lock\Store\SemaphoreStore;
3434
use Symfony\Component\Mailer\Mailer;
35-
use Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsSerializer;
3635
use Symfony\Component\Messenger\MessageBusInterface;
3736
use Symfony\Component\Notifier\Notifier;
3837
use Symfony\Component\PropertyAccess\PropertyAccessor;
@@ -1333,10 +1332,6 @@ private function addWebLinkSection(ArrayNodeDefinition $rootNode, callable $enab
13331332

13341333
private function addMessengerSection(ArrayNodeDefinition $rootNode, callable $enableIfStandalone)
13351334
{
1336-
$defaultSerializer = class_exists(AmazonSqsSerializer::class)
1337-
? 'messenger.transport.amazon_php_serializer'
1338-
: 'messenger.transport.native_php_serializer';
1339-
13401335
$rootNode
13411336
->children()
13421337
->arrayNode('messenger')
@@ -1400,7 +1395,7 @@ function ($a) {
14001395
->addDefaultsIfNotSet()
14011396
->children()
14021397
->scalarNode('default_serializer')
1403-
->defaultValue($defaultSerializer)
1398+
->defaultValue('messenger.transport.native_php_serializer')
14041399
->info('Service id to use as the default serializer for the transports.')
14051400
->end()
14061401
->arrayNode('symfony_serializer')

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php

-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
1313

1414
use Symfony\Component\DependencyInjection\ServiceLocator;
15-
use Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsSerializer;
1615
use Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsTransportFactory;
1716
use Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpTransportFactory;
1817
use Symfony\Component\Messenger\Bridge\Beanstalkd\Transport\BeanstalkdTransportFactory;
@@ -76,8 +75,6 @@
7675

7776
->set('messenger.transport.native_php_serializer', PhpSerializer::class)
7877

79-
->set('messenger.transport.amazon_php_serializer', AmazonSqsSerializer::class)
80-
8178
// Middleware
8279
->set('messenger.middleware.handle_message', HandleMessageMiddleware::class)
8380
->abstract()

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
use Symfony\Component\HttpClient\HttpClient;
2323
use Symfony\Component\Lock\Store\SemaphoreStore;
2424
use Symfony\Component\Mailer\Mailer;
25-
use Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsSerializer;
2625
use Symfony\Component\Messenger\MessageBusInterface;
2726
use Symfony\Component\Notifier\Notifier;
2827
use Symfony\Component\RateLimiter\Policy\TokenBucketLimiter;
@@ -560,9 +559,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
560559
'transports' => [],
561560
'failure_transport' => null,
562561
'serializer' => [
563-
'default_serializer' => class_exists(AmazonSqsSerializer::class)
564-
? 'messenger.transport.amazon_php_serializer'
565-
: 'messenger.transport.native_php_serializer',
562+
'default_serializer' => 'messenger.transport.native_php_serializer',
566563
'symfony_serializer' => [
567564
'format' => 'json',
568565
'context' => [],

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php

+15
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,19 @@ public function testSendWithAmazonSqsXrayTraceHeaderStamp()
7272
$sender = new AmazonSqsSender($connection, $serializer);
7373
$sender->send($envelope);
7474
}
75+
76+
public function testSendEncodeBodyToRespectAmazonRequirements()
77+
{
78+
$envelope = new Envelope(new DummyMessage('Oy'));
79+
$encoded = ['body' => "\x7", 'headers' => ['type' => DummyMessage::class]];
80+
81+
$connection = $this->createMock(Connection::class);
82+
$connection->expects($this->once())->method('send')->with(base64_encode($encoded['body']), $encoded['headers']);
83+
84+
$serializer = $this->createMock(SerializerInterface::class);
85+
$serializer->method('encode')->with($envelope)->willReturn($encoded);
86+
87+
$sender = new AmazonSqsSender($connection, $serializer);
88+
$sender->send($envelope);
89+
}
7590
}

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSerializerTest.php

-106
This file was deleted.

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Transport/AmazonSqsReceiver.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\Messenger\Exception\TransportException;
1919
use Symfony\Component\Messenger\Transport\Receiver\MessageCountAwareInterface;
2020
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
21+
use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer;
2122
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
2223

2324
/**
@@ -31,7 +32,7 @@ class AmazonSqsReceiver implements ReceiverInterface, MessageCountAwareInterface
3132
public function __construct(Connection $connection, ?SerializerInterface $serializer = null)
3233
{
3334
$this->connection = $connection;
34-
$this->serializer = $serializer ?? new AmazonSqsSerializer();
35+
$this->serializer = $serializer ?? new PhpSerializer();
3536
}
3637

3738
/**

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Transport/AmazonSqsSender.php

+17
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public function __construct(Connection $connection, SerializerInterface $seriali
3838
public function send(Envelope $envelope): Envelope
3939
{
4040
$encodedMessage = $this->serializer->encode($envelope);
41+
$encodedMessage = $this->complyWithAmazonSqsRequirements($encodedMessage);
4142

4243
/** @var DelayStamp|null $delayStamp */
4344
$delayStamp = $envelope->last(DelayStamp::class);
@@ -75,4 +76,20 @@ public function send(Envelope $envelope): Envelope
7576

7677
return $envelope;
7778
}
79+
80+
/**
81+
* @see https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html
82+
*
83+
* @param array{body: string, headers?: array<string>} $encodedMessage
84+
*
85+
* @return array{body: string, headers?: array<string>}
86+
*/
87+
private function complyWithAmazonSqsRequirements(array $encodedMessage): array
88+
{
89+
if (preg_match('/[^\x20-\x{D7FF}\xA\xD\x9\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]/u', $encodedMessage['body'])) {
90+
$encodedMessage['body'] = base64_encode($encodedMessage['body']);
91+
}
92+
93+
return $encodedMessage;
94+
}
7895
}

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Transport/AmazonSqsSerializer.php

-28
This file was deleted.

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Transport/AmazonSqsTransport.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Messenger\Transport\Receiver\MessageCountAwareInterface;
1818
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
1919
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
20+
use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer;
2021
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
2122
use Symfony\Component\Messenger\Transport\SetupableTransportInterface;
2223
use Symfony\Component\Messenger\Transport\TransportInterface;
@@ -35,7 +36,7 @@ class AmazonSqsTransport implements TransportInterface, SetupableTransportInterf
3536
public function __construct(Connection $connection, ?SerializerInterface $serializer = null, ?ReceiverInterface $receiver = null, ?SenderInterface $sender = null)
3637
{
3738
$this->connection = $connection;
38-
$this->serializer = $serializer ?? new AmazonSqsSerializer();
39+
$this->serializer = $serializer ?? new PhpSerializer();
3940
$this->receiver = $receiver;
4041
$this->sender = $sender;
4142
}

src/Symfony/Component/Messenger/Bridge/AmazonSqs/composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"php": ">=7.2.5",
2020
"async-aws/core": "^1.5",
2121
"async-aws/sqs": "^1.0|^2.0",
22-
"symfony/messenger": "^4.4.19|^5.0|^6.0",
22+
"symfony/messenger": "^4.3|^5.0|^6.0",
2323
"symfony/service-contracts": "^1.1|^2|^3",
2424
"psr/log": "^1|^2|^3"
2525
},

0 commit comments

Comments
 (0)