コード例 #1
0
 /**
  * @test
  */
 public function getQueueSettingsMergesPresetWithQueueSettings()
 {
     $this->inject($this->queueManager, 'settings', ['presets' => ['somePreset' => ['className' => 'Some\\Preset\\ClassName', 'maximumNumberOfReleases' => 123, 'queueNamePrefix' => 'presetPrefix', 'options' => ['option1' => 'from preset', 'option2' => 'from preset'], 'releaseOptions' => ['bar' => 'from preset']]], 'queues' => ['TestQueue' => ['preset' => 'somePreset', 'className' => TestQueue::class, 'maximumNumberOfReleases' => 321, 'queueNamePrefix' => 'queuePrefix', 'options' => ['option2' => 'overridden from queue', 'option3' => 'from queue'], 'releaseOptions' => ['bar' => 'from queue']]]]);
     $expectedSettings = ['className' => TestQueue::class, 'maximumNumberOfReleases' => 321, 'queueNamePrefix' => 'queuePrefix', 'options' => ['option1' => 'from preset', 'option2' => 'overridden from queue', 'option3' => 'from queue'], 'releaseOptions' => ['bar' => 'from queue'], 'preset' => 'somePreset'];
     $queueSettings = $this->queueManager->getQueueSettings('TestQueue');
     $this->assertSame($expectedSettings, $queueSettings);
 }
コード例 #2
0
 /**
  * Wait for a job in the given queue and execute it
  * A worker using this method should catch exceptions
  *
  * @param string $queueName
  * @param integer $timeout
  * @return Message The message that was processed or NULL if no job was executed and a timeout occurred
  * @throws \Exception
  * @api
  */
 public function waitAndExecute($queueName, $timeout = null)
 {
     $queue = $this->queueManager->getQueue($queueName);
     $message = $queue->waitAndReserve($timeout);
     if ($message === null) {
         $this->emitMessageTimeout($queue);
         // timeout
         return null;
     }
     $this->emitMessageReserved($queue, $message);
     $queueSettings = $this->queueManager->getQueueSettings($queueName);
     try {
         if (isset($queueSettings['executeIsolated']) && $queueSettings['executeIsolated'] === true) {
             Scripts::executeCommand('flowpack.jobqueue.common:job:execute', $this->flowSettings, false, [$queue->getName(), base64_encode(serialize($message))]);
         } else {
             $this->executeJobForMessage($queue, $message);
         }
     } catch (\Exception $exception) {
         $maximumNumberOfReleases = isset($queueSettings['maximumNumberOfReleases']) ? (int) $queueSettings['maximumNumberOfReleases'] : 0;
         if ($message->getNumberOfReleases() < $maximumNumberOfReleases) {
             $releaseOptions = isset($queueSettings['releaseOptions']) ? $queueSettings['releaseOptions'] : [];
             $queue->release($message->getIdentifier(), $releaseOptions);
             $this->emitMessageReleased($queue, $message, $releaseOptions, $exception);
             throw new JobQueueException(sprintf('Job execution for job (message: "%s", queue: "%s") failed (%d/%d trials) - RELEASE', $message->getIdentifier(), $queue->getName(), $message->getNumberOfReleases() + 1, $maximumNumberOfReleases + 1), 1334056583, $exception);
         } else {
             $queue->abort($message->getIdentifier());
             $this->emitMessageFailed($queue, $message, $exception);
             throw new JobQueueException(sprintf('Job execution for job (message: "%s", queue: "%s") failed (%d/%d trials) - ABORTING', $message->getIdentifier(), $queue->getName(), $message->getNumberOfReleases() + 1, $maximumNumberOfReleases + 1), 1334056584, $exception);
         }
     }
     $queue->finish($message->getIdentifier());
     $this->emitMessageFinished($queue, $message);
     return $message;
 }
コード例 #3
0
 /**
  * Describe a single queue
  *
  * Displays the configuration for a queue, merged with the preset settings if any.
  *
  * @param string $queue Name of the queue to describe (e.g. "some-queue")
  * @return void
  */
 public function describeCommand($queue)
 {
     $queueSettings = $this->queueManager->getQueueSettings($queue);
     $this->outputLine('Configuration options for Queue <b>%s</b>:', [$queue]);
     $rows = [];
     foreach ($queueSettings as $name => $value) {
         $rows[] = [$name, is_array($value) ? json_encode($value, JSON_PRETTY_PRINT) : $value];
     }
     $this->output->outputTable($rows, ['Option', 'Value']);
 }