diff --git a/pkg/sqs/SqsMessage.php b/pkg/sqs/SqsMessage.php index 772c3e217..ae581d2b9 100644 --- a/pkg/sqs/SqsMessage.php +++ b/pkg/sqs/SqsMessage.php @@ -176,9 +176,10 @@ public function getMessageId(): ?string public function getTimestamp(): ?int { - $value = $this->getHeader('timestamp'); + $value = $this->getAttribute('SentTimestamp'); - return null === $value ? null : (int) $value; + // SQS SentTimestamp is milliseconds since epoch. + return null === $value ? null : (int) $intdiv($value, 1000); } public function setTimestamp(?int $timestamp = null): void diff --git a/pkg/sqs/Tests/SqsConsumerTest.php b/pkg/sqs/Tests/SqsConsumerTest.php index ef06c6157..773529411 100644 --- a/pkg/sqs/Tests/SqsConsumerTest.php +++ b/pkg/sqs/Tests/SqsConsumerTest.php @@ -341,6 +341,7 @@ public function testShouldReceiveMessage() 'ApproximateReceiveCount' => '3', 'SentTimestamp' => '1560512260079', ], $result->getAttributes()); + $this->assertSame(1560512260, $result->getTimestamp()); $this->assertTrue($result->isRedelivered()); $this->assertEquals('The Receipt', $result->getReceiptHandle()); $this->assertEquals('theMessageId', $result->getMessageId()); diff --git a/pkg/sqs/Tests/SqsMessageTest.php b/pkg/sqs/Tests/SqsMessageTest.php index 5da37b531..e010b6849 100644 --- a/pkg/sqs/Tests/SqsMessageTest.php +++ b/pkg/sqs/Tests/SqsMessageTest.php @@ -52,6 +52,23 @@ public function testShouldSetTimestampAsHeader() $this->assertSame(['timestamp' => 12345], $message->getHeaders()); } + public function testShouldGetTimestampFromSentTimestampAttribute() + { + $message = new SqsMessage(); + $message->setAttributes([ + 'SentTimestamp' => '1560512260079', + ]); + + $this->assertSame(1560512260, $message->getTimestamp()); + } + + public function testShouldReturnNullTimestampWhenSentTimestampAttributeIsMissing() + { + $message = new SqsMessage(); + + $this->assertNull($message->getTimestamp()); + } + public function testShouldSetReplyToAsHeader() { $message = new SqsMessage();