Nexa Queue
Nexa Queue adalah sistem antrian yang kuat dan fleksibel untuk mengelola
tugas asinkron dalam aplikasi Nexa. Sistem ini menyediakan berbagai
fitur untuk pengelolaan antrian yang efisien, termasuk prioritas,
pemrosesan batch, dan mekanisme retry.
Konstruktor
Untuk membuat instance Nexa Queue, Anda dapat menggunakan konstruktor
dengan beberapa parameter opsional:
use app\Nexa;
$nexa = new Nexa();
// Menggunakan Brief untuk tabel 'users'
$queue=$nexa->Queue('nama_tabel');
// Dengan nama tabel dan node ID kustom
$queue = $nexa->Queue('custom_queues', 'worker-1');
// Dengan implementasi cache kustom
$customCache = new CustomCacheImplementation();
$queue =$nexa->Queue('custom_queues', 'worker-1', $customCache);
Parameter
-
$table_name
(opsional) - Nama tabel untuk antrian
(default: 'queues')
-
$nodeId
(opsional) - ID unik untuk worker node (default:
hostname)
-
$cache
(opsional) - Implementasi CacheInterface kustom
(default: MemoryCache)
Menambah Item
Untuk menambahkan item ke dalam antrian, gunakan method
push()
:
$queue = new NexaQueue();
$queue->push('email-queue', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Welcome to our platform!'
]);
Mengambil Item
Untuk mengambil dan memproses item dari antrian, gunakan method
pop()
:
$item = $queue->pop('email-queue');
if ($item) {
// Proses item
$data = $item['data'];
}
Menandai Selesai
Setelah item berhasil diproses, tandai sebagai selesai:
$queue->complete($item['id']);
Menandai Gagal
Jika pemrosesan gagal, tandai item sebagai gagal:
$queue->fail($item['id'], 'Error sending email');
Antrian Prioritas
Menambahkan item dengan prioritas tertentu:
$queue->pushWithPriority('email-queue', $data, 10); // Priority 0-10
Pemrosesan Batch
Memproses multiple item sekaligus:
$results = $queue->processBatch('email-queue', function($data) {
// Process batch item
}, 10);
Mekanisme Pengulangan
Mencoba ulang item yang gagal:
$queue->retry($failedItemId);
Pemeriksaan Status
Memeriksa status antrian:
$status = $queue->checkStatus('email-queue');
Statistik
Mendapatkan statistik antrian:
$stats = $queue->getStatistics('email-queue');
Pembersihan
Membersihkan item antrian yang sudah lama:
$queue->cleanup(30); // Hapus item lebih dari 30 hari
Pemantauan & Metrik
Mengumpulkan metrik performa antrian:
$metrics = $queue->collectMetrics();
// Returns: throughput, latency, error rate, queue depth
Manajemen Cache
Mengatur konfigurasi cache:
$queue->setCacheConfig([
'enabled' => true,
'ttl' => 300,
'prefix' => 'queue:'
]);
Manajemen Tabel
NexaQueue menyediakan method untuk mengelola tabel antrian:
Membuat Tabel
// Membuat tabel dengan nama default
$queue->createQueueTable();
// Membuat tabel dengan nama kustom
$queue->createQueueTable('custom_queue_table');
Cek Keberadaan Tabel
if ($queue->tableExists()) {
// Tabel sudah ada
}
Hapus Tabel
$queue->dropTable();
Manajemen Item
Melihat Detail Queue
// Melihat semua item dalam queue
$items = $queue->viewQueue('email-queue');
// Filter berdasarkan status
$items = $queue->viewQueue('email-queue', 'pending');
Mendapatkan Item by ID
$item = $queue->refId(123);
Update Item
$queue->update(123, [
'to' => 'new@example.com',
'subject' => 'Updated Subject'
], [
'priority' => 8,
'status' => 'pending',
'max_attempts' => 5
]);
Hapus Item
$queue->delete(123);
Debug Item
$debug_info = $queue->debugItem(123);