示例#1
0
 /**
  * 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);
 }
示例#2
0
 /**
  * @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);
     }
 }