/** * Get messages in the queue * * @param QueueInterface $queue * @param integer $maxMessages Maximum number of messages to return * @param ReceiveParametersInterface $params * @return MessageIterator */ public function receiveMessages(QueueInterface $queue, $maxMessages = null, ReceiveParametersInterface $params = null) { if ($maxMessages === null) { $maxMessages = 1; } $timeout = $params ? $params->getVisibilityTimeout() : null; $filter = $params ? $params->getClassFilter() : null; $peek = $params ? $params->getPeekMode() : false; $microtime = (int) microtime(true); $data = []; if ($maxMessages > 0) { $count = 0; $temp =& $this->data[$queue->getName()]; foreach ($temp as $messageId => &$msg) { if (null !== $filter && $msg['class'] != $filter) { continue; } if (isset($msg['schedule']) && $microtime < $msg['schedule']) { continue; } if ($msg['handle'] === null || $msg['timeout'] !== null && $msg['timeout'] < $microtime) { if ($peek) { $msg['handle'] = null; $msg['timeout'] = null; } else { $msg['handle'] = md5(uniqid(rand(), true)); $msg['timeout'] = $timeout ? $microtime + $timeout : null; } $msg['metadata'][$queue->getOptions()->getMessageMetadatumKey()] = $this->buildMessageInfo($msg['handle'], $messageId, $queue, [SendParametersInterface::SCHEDULE => isset($msg['schedule']) ? $msg['schedule'] : null, SendParametersInterface::REPEATING_INTERVAL => isset($msg['interval']) ? $msg['interval'] : null]); $data[] = $msg; ++$count; } if ($count >= $maxMessages) { break; } } } $classname = $queue->getOptions()->getMessageSetClass(); return new $classname($data, $queue); }
/** * @param Queue $queue * @param MessageInterface $message * @return void */ protected function cleanMessageInfo(Queue $queue, MessageInterface $message) { $metadatumKey = $queue->getOptions()->getMessageMetadatumKey(); if ($message->getMetadata($metadatumKey)) { $message->setMetadata($metadatumKey, null); } }