Рейтинг:0

Как обрабатывать большие очереди

флаг cn

Я использую плагин QueueWorker для обновления/создания узла в фоновом режиме. На локальном уровне проблем нет, он завершает весь процесс очереди.Однако на сервере aws он обычно останавливается в какой-то момент. Я предполагаю из-за потребления ресурсов на сервере. Каков идеальный способ оптимизации моего QueueWorker?

Вот мой код:

$ смещение = 0;

пока (ИСТИНА) {
  $nodes= \Drupal::entityQuery('узел')->условие('тип', 'статья')->диапазон($смещение, $лимит)->выполнить();

  $смещение = $смещение + $лимит;
  если (пусто($узлы)) {
    сломать;
  }

  // Инициализировать ОЧЕРЕДЬ
  $queue_manager = \Drupal::service('plugin.manager.queue_worker');
  $queue_worker = $queue_manager->createInstance('ex_queue');
  $queue = $this->queueFactory->get('ex_queue');
  // Создаем элементы ОЧЕРЕДИ
  foreach ($nodes как $node) {
    $item = новый \stdClass();
    $item->content = $узел;
    $queue->createItem($item);
  }
  // Выполнить элементы ОЧЕРЕДИ
  в то время как ($item = $queue->claimItem()) {
    пытаться {
      $queue_worker->processItem($item->данные);
      $queue->deleteItem($item);
    }
    поймать (RequeueException $e) {
      $queue->releaseItem($item);
      \Drupal::logger('system')->warning('RequeueException');
    }
    поймать (SuspendQueueException $e) {
      $queue->releaseItem($item);
      \Drupal::logger('system')->error('SuspendQueueException');
    }
    поймать (\ Исключение $e) {
      $queue->releaseItem($item);
      \Drupal::logger('система')->error('Исключение');
    }
  }
}

и мой QueueWorker

/**
 * @QueueWorker(
 * id = "бывшая_очередь",
 * title = @Translation("Ex Processor"),
 * cron = {"время" = 3600}
 * )
 */
класс ExQueueProcessor расширяет QueueWorkerBase, реализует ContainerFactoryPluginInterface {

  защищенная конфигурация $;

  /**
   * {@inheritdoc}
   */
  общедоступная функция __construct (конфигурация массива $) {
    $this->configuration = $configuration;
  }

  /**
   * {@inheritdoc}
   */
  общедоступная статическая функция create(ContainerInterface $container, массив $configuration, $plugin_id, $plugin_definition) {
    вернуть новую статику(
      $конфигурация
    );
  }
       /**
       * {@inheritdoc}
       */
      публичная функция processItem($item) {
        // заниматься вещами
      }

Допустим, общее количество $nodes составляет 17 000 элементов, и оно останавливается на отметке 15 000. Есть ли способ оптимизировать это, чтобы он мог обрабатывать большие данные?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.