Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function pop(string $queue = null)
 {
     $queue = $this->getQueue($queue);
     $job = $this->pheanstalk->watchOnly($queue)->reserve(0);
     if ($job instanceof PheanstalkJob) {
         return new BeanstalkdJob($this->container, $this->pheanstalk, $job, $queue);
     }
 }
Exemplo n.º 2
0
 /**
  * @return int Status code to exit with
  */
 public function run()
 {
     $env = $this->context->env;
     $tube = $env->get('BEANSTALKD_TUBE') ?: 'default';
     $class = $env->get('BEANSTALKD_CONSUMER');
     if (!$class) {
         $this->stdio->outln('<<red>>BEANSTALKD_CONSUMER environmental variable is not set<<reset>>');
         return Status::USAGE;
     }
     if (!class_exists($class)) {
         $this->stdio->outln(sprintf('<<red>>BEANSTALKD_CONSUMER does not reference a locatable class: %s<<reset>>', $class));
         return Status::DATAERR;
     }
     if (!in_array(ConsumerInterface::class, class_implements($class))) {
         $this->stdio->outln(sprintf('<<red>>BEANSTALKD_CONSUMER references a class that does not implement ConsumerInterface: %s<<reset>>', $class));
         return Status::DATAERR;
     }
     $this->pheanstalk->watchOnly($tube);
     $consumer = call_user_func($this->resolver, $class);
     while (call_user_func($this->listener)) {
         $reserved = $this->pheanstalk->reserve();
         if (!$reserved) {
             continue;
         }
         $job = new Job($reserved->getId(), $reserved->getData());
         try {
             $result = $consumer->consume($job);
             if ($result === false) {
                 $this->pheanstalk->release($job);
                 continue;
             }
         } catch (\Exception $e) {
             $this->pheanstalk->release($job);
             throw $e;
         }
         $this->pheanstalk->delete($job);
     }
     return Status::SUCCESS;
 }