ฉันใช้ปลั๊กอิน QueueWorker เพื่ออัปเดต/สร้างกระบวนการโหนดในเบื้องหลัง ในพื้นที่ไม่มีปัญหา มันเสร็จสิ้นกระบวนการคิวทั้งหมดอย่างไรก็ตามบนเซิร์ฟเวอร์ aws มักจะหยุดในบางจุด
ฉันสันนิษฐานว่าเป็นเพราะการใช้ทรัพยากรบนเซิร์ฟเวอร์ วิธีที่เหมาะสมที่สุดในการเพิ่มประสิทธิภาพ QueueWorker ของฉันคืออะไร
นี่คือรหัสของฉัน:
$offset = 0;
ในขณะที่ (จริง) {
$nodes= \Drupal::entityQuery('node')->condition('type', 'article')->range($offset, $limit)->execute();
$offset = $offset + $limit;
ถ้า (ว่าง ($ โหนด)) {
หยุดพัก;
}
// เริ่มต้น QUEUE
$queue_manager = \Drupal::service('plugin.manager.queue_worker');
$queue_worker = $queue_manager->createInstance('ex_queue');
$queue = $this->queueFactory->get('ex_queue');
// สร้างรายการ QUEUE
foreach ($ โหนดเป็น $ โหนด) {
$item = ใหม่ \stdClass();
$item->content = $node;
$queue->createItem($item);
}
// ดำเนินการรายการ QUEUE
ในขณะที่ ($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('ระบบ')->ข้อผิดพลาด ('SuspendQueueException');
}
จับ (\ ข้อยกเว้น $e) {
$queue->releaseItem($item);
\Drupal::logger('system')->error('Exception');
}
}
}
และ QueueWorker ของฉัน
/**
* @คิวเวิร์คเกอร์(
* id = "ex_queue",
* title = @Translation("ตัวประมวลผลอดีต"),
* cron = {"เวลา" = 3600}
* )
*/
คลาส ExQueueProcessor ขยาย QueueWorkerBase ใช้ ContainerFactoryPluginInterface {
ป้องกัน $configuration;
/**
* {@inheritdoc}
*/
ฟังก์ชั่นสาธารณะ __construct (อาร์เรย์ $configuration) {
$this->configuration = $configuration;
}
/**
* {@inheritdoc}
*/
การสร้างฟังก์ชันสแตติกสาธารณะ (ContainerInterface $container, อาร์เรย์ $configuration, $plugin_id, $plugin_definition) {
ส่งคืนค่าคงที่ใหม่ (
$configuration
);
}
/**
* {@inheritdoc}
*/
ฟังก์ชั่นสาธารณะ processItem ($ รายการ) {
// ทำสิ่งต่างๆ
}
สมมติว่า จำนวน $nodes ทั้งหมดคือ 17,000 รายการ และหยุดที่ประมาณ 15,000 รายการ มีการเพิ่มประสิทธิภาพมากกว่านี้เพื่อให้จัดการกับข้อมูลขนาดใหญ่หรือไม่?