/** * {@inheritDoc} */ public function receive(array $options = []) { $options = $this->mergeOptions($options); if (!$this->queueExists()) { $this->create(); } $messages = $this->ironmq->reserveMessages($this->getNameWithPrefix(), $options['messages_to_receive'], $options['message_timeout'], $options['receive_wait_time']); if (!is_array($messages)) { $this->log(200, "No messages found in queue."); return []; } // Convert to Message Class foreach ($messages as &$message) { $id = $message->id; $body = json_decode($message->body, true); $metadata = ['reserved_count' => $message->reserved_count, 'reservation_id' => $message->reservation_id]; unset($body['_qpush_queue']); $message = new Message($id, json_encode($body), $metadata); $this->log(200, "Message has been received.", ['message_id' => $id]); } $this->reservedMessages = array_combine(array_values(array_map(function (Message $message) { return $message->getId(); }, $messages)), $messages); return $messages; }
// Retrieve a message from a queue $message = $ironMQ->reserveMessage($queueName); var_dump($message); // Touch a message to keep it around longer, in case you are nearing the timeout echo 'Touching a message'; $reservationID = $ironMQ->touchMessage($queueName, $message->id, $message->reservation_id, IronMQ::GET_MESSAGE_TIMEOUT); var_dump($reservationID); // The reservation ID changes after touching, so make sure to update the message $message->reservation_id = $reservationID->reservation_id; // Delete a message when you are finished. Reserved messages MUST pass the reservation ID $deleteResult = $ironMQ->deleteMessage($queueName, $message->id, $message->reservation_id); var_dump($deleteResult); // Put some new messages in the queue for us to work with $ironMQ->postMessage($queueName, 'This is a sample message'); $ironMQ->postMessage($queueName, 'This is a sample message2'); $ironMQ->postMessage($queueName, 'This is a sample message3'); $ironMQ->postMessage($queueName, 'This is a sample message4'); $messages = $ironMQ->reserveMessages($queueName, 4); var_dump($messages); // Delete all of the messages. You can also delete messages individually if you'd like $ironMQ->deleteMessages($queueName, $messages); // Put some new messages in the queue for us to work with $ironMQ->postMessage($queueName, 'This is a sample message'); $ironMQ->postMessage($queueName, 'This is a sample message2'); // See what messages are there without reserving them $peekResult = $ironMQ->peekMessage($queueName); var_dump($peekResult); $peekResult = $ironMQ->peekMessages($queueName, 2); var_dump($peekResult); // Delete the sample queue we created $ironMQ->deleteQueue($queueName);