From 89f62be54e56269b518013be4fad8280ff7d1d14 Mon Sep 17 00:00:00 2001 From: chocopowwwa Date: Mon, 12 Mar 2018 21:50:39 +0700 Subject: [PATCH 1/2] Implement queue release delay --- src/Job.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Job.php b/src/Job.php index 1446c37..7cc202e 100644 --- a/src/Job.php +++ b/src/Job.php @@ -8,6 +8,7 @@ use Interop\Queue\PsrConsumer; use Interop\Queue\PsrContext; use Interop\Queue\PsrMessage; +use Interop\Queue\DeliveryDelayNotSupportedException; class Job extends BaseJob implements JobContract { @@ -41,7 +42,7 @@ public function __construct(Container $container, PsrContext $psrContext, PsrCon $this->psrMessage = $psrMessage; $this->connectionName = $connectionName; } - + public function getJobId() { return $this->psrMessage->getMessageId(); @@ -62,16 +63,18 @@ public function delete() */ public function release($delay = 0) { - if ($delay) { - throw new \LogicException('To be implemented'); - } - $requeueMessage = clone $this->psrMessage; $requeueMessage->setProperty('x-attempts', $this->attempts() + 1); - $this->psrContext->createProducer()->send($this->psrConsumer->getQueue(), $requeueMessage); + $producer = $this->psrContext->createProducer(); + + try { + $producer->setDeliveryDelay($this->secondsUntil($delay) * 1000); + } catch (DeliveryDelayNotSupportedException $e) { + } $this->psrConsumer->acknowledge($this->psrMessage); + $producer->send($this->psrConsumer->getQueue(), $requeueMessage); } /** From d180336fe4558551621711adc53ea424e621670c Mon Sep 17 00:00:00 2001 From: ChocoPowwwa Date: Tue, 13 Mar 2018 14:06:25 +0700 Subject: [PATCH 2/2] Call parent method to mark queue as release sorry i'm so clumsy, if you want to close this PR and do this in your own implementation, i'd me more than happy to do that, thank you --- src/Job.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Job.php b/src/Job.php index 7cc202e..a744f63 100644 --- a/src/Job.php +++ b/src/Job.php @@ -63,6 +63,8 @@ public function delete() */ public function release($delay = 0) { + parent::release($delay); + $requeueMessage = clone $this->psrMessage; $requeueMessage->setProperty('x-attempts', $this->attempts() + 1);