diff --git a/pkg/dbal/Client/DbalDriver.php b/pkg/dbal/Client/DbalDriver.php index 9df564417..34da95208 100644 --- a/pkg/dbal/Client/DbalDriver.php +++ b/pkg/dbal/Client/DbalDriver.php @@ -71,7 +71,12 @@ public function createTransportMessage(Message $message) $transportMessage->setProperties($properties); $transportMessage->setMessageId($message->getMessageId()); $transportMessage->setTimestamp($message->getTimestamp()); - $transportMessage->setDeliveryDelay($message->getDelay() * 1000); + + $delay = $message->getDelay(); + $transportMessage->setDeliveryDelay((null === $delay) ? null : ($delay * 1000)); + + $timeToLive = $message->getExpire(); + $transportMessage->setTimeToLive((null === $timeToLive) ? null : ($timeToLive * 1000)); $transportMessage->setReplyTo($message->getReplyTo()); $transportMessage->setCorrelationId($message->getCorrelationId()); if (array_key_exists($message->getPriority(), self::$priorityMap)) { @@ -97,7 +102,12 @@ public function createClientMessage(PsrMessage $message) $clientMessage->setContentType($message->getHeader('content_type')); $clientMessage->setMessageId($message->getMessageId()); $clientMessage->setTimestamp($message->getTimestamp()); - $clientMessage->setDelay($message->getDeliveryDelay() / 1000); + + $timeToLive = $message->getTimeToLive(); + $clientMessage->setExpire((null === $timeToLive) ? null : (int) ($timeToLive / 1000)); + + $delay = $message->getDeliveryDelay(); + $clientMessage->setDelay((null === $delay) ? null : (int) ($delay / 1000)); $clientMessage->setReplyTo($message->getReplyTo()); $clientMessage->setCorrelationId($message->getCorrelationId()); diff --git a/pkg/dbal/DbalConsumer.php b/pkg/dbal/DbalConsumer.php index b58d30c2d..2a687fedd 100644 --- a/pkg/dbal/DbalConsumer.php +++ b/pkg/dbal/DbalConsumer.php @@ -163,7 +163,7 @@ protected function receiveMessage() $this->dbal->commit(); - if (empty($dbalMessage['time_to_live']) || $dbalMessage['time_to_live'] > time()) { + if (empty($dbalMessage['time_to_live']) || ($dbalMessage['time_to_live'] / 1000) > microtime(true)) { return $this->convertMessage($dbalMessage); } } catch (\Exception $e) { diff --git a/pkg/dbal/Tests/Client/DbalDriverTest.php b/pkg/dbal/Tests/Client/DbalDriverTest.php index e659b1c92..d4b51e429 100644 --- a/pkg/dbal/Tests/Client/DbalDriverTest.php +++ b/pkg/dbal/Tests/Client/DbalDriverTest.php @@ -94,6 +94,7 @@ public function testShouldConvertTransportMessageToClientMessage() $transportMessage->setTimestamp(1000); $transportMessage->setPriority(2); $transportMessage->setDeliveryDelay(12345); + $transportMessage->setTimeToLive(67890); $driver = new DbalDriver( $this->createPsrContextMock(), @@ -117,9 +118,8 @@ public function testShouldConvertTransportMessageToClientMessage() $this->assertSame('MessageId', $clientMessage->getMessageId()); $this->assertSame('ContentType', $clientMessage->getContentType()); $this->assertSame(1000, $clientMessage->getTimestamp()); - $this->assertSame(12.345, $clientMessage->getDelay()); - - $this->assertNull($clientMessage->getExpire()); + $this->assertSame(12, $clientMessage->getDelay()); + $this->assertSame(67, $clientMessage->getExpire()); $this->assertSame(MessagePriority::NORMAL, $clientMessage->getPriority()); } @@ -164,6 +164,7 @@ public function testShouldConvertClientMessageToTransportMessage() $this->assertSame([ 'key' => 'val', ], $transportMessage->getProperties()); + $this->assertSame(123000, $transportMessage->getTimeToLive()); $this->assertSame('MessageId', $transportMessage->getMessageId()); $this->assertSame(1000, $transportMessage->getTimestamp()); $this->assertSame(23000, $transportMessage->getDeliveryDelay());