whmcs-queue-system
Async job queue for WHMCS
SKILL.mdskills/whmcs-queue-system/SKILL.md
GitHubWHMCS Queue System Skill
Overview
This skill provides patterns for implementing async job queues in WHMCS.
Implementation Patterns
Queue Manager
<?php
/**
* WHMCS Queue System
* Manages async job processing
*/
namespace WHMCS\Module\Performance\Queue;
class QueueManager {
private $db;
public function __construct() {
$this->db = \WHMCS\Database\Capsule::connection();
}
/**
* Enqueue job
*/
public function enqueue(array $job): string {
$jobId = 'job_' . bin2hex(random_bytes(8));
$this->db->insert('mod_queue_jobs', [
'id' => $jobId,
'type' => $job['type'],
'payload' => json_encode($job['payload']),
'priority' => $job['priority'] ?? 5,
'status' => 'pending',
'created_at' => date('Y-m-d H:i:s')
]);
return $jobId;
}
/**
* Process jobs
*/
public function processJobs(int $limit = 10): array {
$jobs = $this->db->select(
"SELECT * FROM mod_queue_jobs
WHERE status = 'pending'
ORDER BY priority ASC, created_at ASC
LIMIT ?",
[$limit]
);
$processed = [];
foreach ($jobs as $job) {
$result = $this->processJob($job);
$processed[] = $result;
}
return [
'processed' => count($processed),
'results' => $processed
];
}
/**
* Get queue stats
*/
public function getStats(): array {
$stats = $this->db->select(
"SELECT status, COUNT(*) as count FROM mod_queue_jobs GROUP BY status"
);
return array_column($stats, 'count', 'status');
}
}
Database Schema
CREATE TABLE `mod_queue_jobs` (
`id` VARCHAR(50) PRIMARY KEY,
`type` VARCHAR(100) NOT NULL,
`payload` TEXT NOT NULL,
`priority` INT DEFAULT 5,
`status` ENUM('pending', 'processing', 'completed', 'failed') DEFAULT 'pending',
`attempts` INT DEFAULT 0,
`error' TEXT,
`created_at' DATETIME NOT NULL,
`processed_at' DATETIME,
INDEX `idx_status` (`status`),
INDEX `idx_priority` (`priority`)
);
Best Practices
- Prioritization: Use priority levels
- Retry Logic: Implement job retries
- Error Handling: Graceful error handling
- Monitoring: Track queue depth
- Workers: Scale workers as needed
Related Skills
- whmcs-caching-strategies
- whmcs-monitoring-agent
- whmcs-connection-pooling
- whmcs-database-indexing