Puncte:0

Cum să gestionați procesul de coadă mare

drapel cn

Folosesc pluginul QueueWorker pentru a face un proces de actualizare/creare a nodului în fundal. Pe local nu există nicio problemă, completează întregul proces de coadă.Cu toate acestea, pe serverul aws se oprește de obicei la un moment dat. Presupun că din cauza consumului de resurse pe server. Care este modalitatea ideală de a-mi optimiza QueueWorker?

Iată codul meu:

$offset = 0;

în timp ce (adevărat) {
  $noduri= \Drupal::entityQuery('nod')->condition('tip', 'articol')->range($offset, $limita)->execute();

  $offset = $offset + $limită;
  dacă (gol ($noduri)) {
    pauză;
  }

  // Inițializează QUEUE
  $queue_manager = \Drupal::service('plugin.manager.queue_worker');
  $queue_worker = $queue_manager->createInstance('ex_queue');
  $coadă = $this->queueFactory->get('ex_queue');
  // Creați articole QUEUE
  foreach ($noduri ca $nod) {
    $item = nou \stdClass();
    $item->conținut = $nod;
    $coadă->createItem($item);
  }
  // Executați articolele QUEUE
  în timp ce ($element = $coadă->claimItem()) {
    încerca {
      $queue_worker->processItem($item->data);
      $coda->deleteItem($item);
    }
    catch (RequeueException $e) {
      $coadă->releaseItem($item);
      \Drupal::logger('system')->warning('RequeueException');
    }
    catch (SuspendQueueException $e) {
      $coadă->releaseItem($item);
      \Drupal::logger('system')->error('SuspendQueueException');
    }
    captură (\Excepție $e) {
      $coadă->releaseItem($item);
      \Drupal::logger('system')->error('Exception');
    }
  }
}

și QueueWorker-ul meu

/**
 * @QueueWorker(
 * id = "ex_queue",
 * title = @Translation ("Ex Processor"),
 * cron = {"timp" = 3600}
 * )
 */
clasa ExQueueProcessor extinde QueueWorkerBase implementează ContainerFactoryPluginInterface {

  $configuratie protejata;

  /**
   * {@inheritdoc}
   */
  funcția publică __construct(matrice $configurare) {
    $aceasta->configurare = $configurare;
  }

  /**
   * {@inheritdoc}
   */
  funcția publică statică create(ContainerInterface $container, matrice $configurație, $plugin_id, $plugin_definition) {
    returnează static nou (
      $configurare
    );
  }
       /**
       * {@inheritdoc}
       */
      funcția publică processItem($item) {
        // fa lucruri
      }

Să spunem că numărul total de $nodes este de 17k articole și se oprește la aproximativ 15k. Există vreo modalitate de a optimiza mai mult acest lucru pentru a-l face să gestioneze date mari?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.