public function dequeue($timeout = false) { if ($timeout !== false) { throw new InvalidArgumentException("Timeout not implemented"); } while (true) { $queues = $this->_listening; foreach ($queues as $queue) { foreach ($queue->ReceiveMessage() as $message) { $this->_messages[$queue->queueName][] = $message; } // return just the first available message foreach ($this->_messages as $queueName => $messages) { foreach ($messages as $message) { $task = Sera_Task_Builder::fromJson(urldecode($message->Body)); $task->messageId = $message->MessageId; $task->receiptHandle = $message->ReceiptHandle; $task->queueName = $queueName; // change the SQS release delay $queue->ChangeMessageVisibility($message->ReceiptHandle, $task->getTimeToRelease()); return $task; } } } // shuffling queues ensures no queue receives better treatment shuffle($queues); sleep($this->_pollRate); } }
public function dequeue($timeout = null) { // TODO: implement the timeout if ($job = $this->_beanstalk->reserve($timeout)) { $task = Sera_Task_Builder::fromJson($job->getData()); $task->beanstalkJob = $job; return $task; } else { return false; } }
/** * Copy tasks in this queue to another queue */ public function copyTo($destQueue) { foreach ($this->_queues as $name => $queue) { $destQueue->select($name); foreach ($queue as $task) { $task = Sera_Task_Builder::fromJson($task); $destQueue->enqueue($task); } } }