You are here

public function JobSchedulerQueue::processItem in Job Scheduler 8.3

Same name and namespace in other branches
  1. 8.2 src/Plugin/QueueWorker/JobSchedulerQueue.php \Drupal\job_scheduler\Plugin\QueueWorker\JobSchedulerQueue::processItem()

Works on a single queue item.

Parameters

mixed $data: The data that was passed to \Drupal\Core\Queue\QueueInterface::createItem() when the item was queued.

Throws

\Drupal\Core\Queue\RequeueException Processing is not yet finished. This will allow another process to claim the item immediately.

\Exception A QueueWorker plugin may throw an exception to indicate there was a problem. The cron process will log the exception, and leave the item in the queue to be processed again later.

\Drupal\Core\Queue\SuspendQueueException More specifically, a SuspendQueueException should be thrown when a QueueWorker plugin is aware that the problem will affect all subsequent workers of its queue. For example, a callback that makes HTTP requests may find that the remote server is not responding. The cron process will behave as with a normal Exception, and in addition will not attempt to process further items from the current item's queue during the current cron run.

Overrides QueueWorkerInterface::processItem

See also

\Drupal\Core\Cron::processQueues()

File

src/Plugin/QueueWorker/JobSchedulerQueue.php, line 40

Class

JobSchedulerQueue
Providing our own worker has the advantage that we can reschedule the job or take care of cleanup. Note that as we run the execute() action, the job won't be queued again this time.

Namespace

Drupal\job_scheduler\Plugin\QueueWorker

Code

public function processItem($id) {
  $job = JobSchedule::load($id);
  $scheduler = $this->scheduler;
  try {
    $scheduler
      ->execute($job);
  } catch (\Exception $e) {
    watchdog_exception('job_scheduler', $e);

    // Drop jobs that have caused exceptions.
    $job
      ->delete();
  }
}