Skip to content

Commit

Permalink
Merge pull request #1631 from mark-fajardo/feature/PNM-685-update-sqs…
Browse files Browse the repository at this point in the history
…-queue-transport-to-handle-fifo-queues-new

[EasyNotification] Update SqsQueueTransport.php to handle FIFO queues
  • Loading branch information
dextercampos authored Jan 28, 2025
2 parents 602c78b + f28054f commit 664b8ae
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 2 deletions.
3 changes: 2 additions & 1 deletion packages/EasyNotification/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"aws/aws-sdk-php": "^3.134",
"eonx-com/easy-utils": "^4.6",
"nette/utils": "^3.1",
"symfony/http-client": "^5.4 || ^6.0"
"symfony/http-client": "^5.4 || ^6.0",
"symfony/uid": "^5.4 || ^6.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5 || ^10.0",
Expand Down
12 changes: 11 additions & 1 deletion packages/EasyNotification/src/Queue/SqsQueueTransport.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Aws\Sqs\SqsClient;
use EonX\EasyNotification\Interfaces\QueueMessageInterface;
use EonX\EasyNotification\Interfaces\QueueTransportInterface;
use Symfony\Component\Uid\Uuid;

final class SqsQueueTransport implements QueueTransportInterface
{
Expand All @@ -22,10 +23,19 @@ public function __construct(SqsClient $sqs)

public function send(QueueMessageInterface $queueMessage): void
{
$queueUrl = $queueMessage->getQueueUrl();

if (\str_ends_with($queueUrl, '.fifo')) {
$messageDeduplicationId = (string)Uuid::v4();
$messageGroupId = (string)Uuid::v4();
}

$this->sqs->sendMessage([
'QueueUrl' => $queueMessage->getQueueUrl(),
'QueueUrl' => $queueUrl,
'MessageAttributes' => $this->formatHeaders($queueMessage->getHeaders()),
'MessageBody' => $queueMessage->getBody(),
'MessageDeduplicationId' => $messageDeduplicationId ?? null,
'MessageGroupId' => $messageGroupId ?? null,
]);
}

Expand Down
2 changes: 2 additions & 0 deletions packages/EasyNotification/tests/NotificationClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ public function testSend(): void
],
],
'MessageBody' => '{"body":"{\"name\":\"nathan\"}","topics":["topic"]}',
'MessageDeduplicationId' => null,
'MessageGroupId' => null,
];

self::assertEquals($expected, $sqsClientStub->getCalls()[0]);
Expand Down
17 changes: 17 additions & 0 deletions packages/EasyNotification/tests/Queue/SqsQueueTransportTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,25 @@ public function testSend(): void
],
],
'MessageBody' => 'my-body',
'MessageDeduplicationId' => null,
'MessageGroupId' => null,
];

self::assertEquals($expected, $stub->getCalls()[0]);
}

public function testSendFifo(): void
{
$queueUrl = 'https://sqs.my-queue.fifo';
$stub = new SqsClientStub();
$queueMessage = (new QueueMessage())
->addHeader('my-header', 'my-value')
->setBody('my-body')
->setQueueUrl($queueUrl);

(new SqsQueueTransport($stub))->send($queueMessage);

self::assertNotNull($stub->getCalls()[0]['MessageDeduplicationId']);
self::assertNotNull($stub->getCalls()[0]['MessageGroupId']);
}
}

0 comments on commit 664b8ae

Please sign in to comment.