queueService = $queueService; $this->queueRepository = $queueRepository; } /** * Load pending items and process them. * * @return int Number of processed items. */ public function processQueue(): int { // Concurrency lock using transients to prevent overlapping cron runs. $lockKey = 'oneclickformsync_cron_processing_lock'; if (get_transient($lockKey) !== false) { return 0; } // Lock for 5 minutes. set_transient($lockKey, '1', 300); $processedCount = 0; try { // Process up to 10 pending items per cron run. $pendingItems = $this->queueRepository->findPending(10); foreach ($pendingItems as $item) { $this->queueService->processItem($item); $processedCount++; } } finally { delete_transient($lockKey); } return $processedCount; } }