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?