コード例 #1
0
 /**
  * Returns a task to work on.
  *
  * @param string $tube (optional) the tube(queue) to reserve a task from
  *
  * @throws TaskQueueServiceException
  * @return WorkPackage
  */
 public function reserveTask($tube = null)
 {
     if (is_null($tube)) {
         $tube = $this->defaultTube;
     }
     $inTask = $this->beanstalk->watch($tube)->ignore('default')->reserve(2);
     if ($inTask === false) {
         return null;
     }
     $data = $inTask->getData();
     $parts = explode("::", $data, 2);
     if (count($parts) !== 2) {
         $this->beanstalk->delete($inTask);
         throw new TaskQueueServiceException("Invalid format in TaskQueue {$tube}");
     }
     try {
         $taskObject = $this->serializer->deserialize($parts[1], $parts[0], 'json');
     } catch (UnsupportedFormatException $exception) {
         $this->beanstalk->delete($inTask);
         throw new TaskQueueServiceException("Invalid format in TaskQueue {$tube} ");
     } catch (\ReflectionException $exception) {
         $this->beanstalk->delete($inTask);
         throw new TaskQueueServiceException("Invalid format in TaskQueue {$tube} class " . $parts[0] . ' is unknown');
     }
     if (!$taskObject instanceof TaskDescriptionInterface) {
         $this->beanstalk->delete($inTask);
         throw new TaskQueueServiceException("Invalid data in TaskQueue {$tube}");
     }
     if (!$this->databaseDisabled) {
         $taskEntity = $this->taskRepo->find($taskObject->getTaskIdentifier());
     } else {
         //remake the task entity
         $taskEntity = new Task($taskObject, '', $tube);
     }
     if (!$taskEntity instanceof Task) {
         $this->beanstalk->delete($inTask);
         throw new TaskQueueServiceException("Unable to find taskEntity for task:" . $taskObject->getTaskIdentifier());
     }
     /**
      * @var Task $taskEntity
      */
     $workPackage = new WorkPackage($taskEntity, $inTask, $taskObject);
     $this->updateTaskStatus($workPackage, Task::STATUS_WORKING);
     return $workPackage;
 }
 /**
  * @return void
  */
 public function testIfWatchWrapsProperly()
 {
     $this->pheanstalk->shouldReceive('watch')->with('tube')->once();
     $return = $this->connection->watch('tube');
     $this->assertEquals($this->connection, $return, 'Return should be the same as the connection');
 }