Node.js Asenkron Görev Yönetimi: BullMQ ile Arka Plan İşlemleri
Bu rehberde ne öğreneceksiniz?
Bu rehberde Node.js uygulamalarında uzun süren işlemleri nasıl arka plana alacağınızı öğreneceksiniz.
BullMQ ve Redis kullanarak istek–yanıt döngüsünü hızlandıracaksınız.
Son olarak görevleri bir panel üzerinden izleyeceksiniz.
🧠 Teknik Özet
Konu, Node.js’te asenkron görev yönetimidir.
Problem, CPU yoğun işlemlerin yanıt süresini uzatmasıdır.
Çözüm, BullMQ ile görevleri Redis kuyruğuna taşımaktır.
Ön Hazırlıklar
Devam etmeden önce şunlar gereklidir:
- Node.js kurulu bir sistem
- Redis çalışan bir servis
- Express.js temel bilgisi
- async/await ve Promise mantığı
1. Neden Asenkron Görev Kuyruğu Kullanılır?
Bazı işlemler saniyeler veya dakikalar sürebilir.
Örnekler:
- Görsel işleme
- Rapor üretimi
- E-posta gönderimi
Bu işlemler ana akışı kilitler.
Kullanıcı bekler, deneyim düşer.
2. BullMQ Nedir?
BullMQ, Redis tabanlı bir görev kuyruğudur.
Uzun işlemleri arka planda çalıştırır.
Ana uygulama hızlı yanıt verir.
Temel bileşenler:
- Queue (Kuyruk)
- Worker (İşçi)
- Job (Görev)
3. Proje Kurulumu
mkdir image-processor && cd image-processor
npm init -y
npm install express express-fileupload sharp ejs bullmq @bull-board/express
- Bu komutlar proje yapısını ve bağımlılıkları kurar.
4. Senkron (Bloklayan) Yapıyı Anlamak
- Görsel işleme CPU yoğun bir iştir.
- İşlem sırasında Node.js yanıt veremez.
- Bu durum performans sorununa yol açar.
Amaç:
- Bu işlemi ana akıştan ayırmak.
5. BullMQ ile Görev Kuyruğu Oluşturma
const { Queue } = require("bullmq");
const imageQueue = new Queue("imageQueue", {
connection: { host: "localhost", port: 6379 }
});
- Bu kod Redis üzerinde bir kuyruk oluşturur.
6. Görevi Kuyruğa Ekleme
await imageQueue.add("processImage", {
image: imageBuffer,
name: imageName
});
- Bu işlem görevi arka plana gönderir.
Kullanıcı beklemez.
7. Worker (İşçi) Tanımlama
const { Worker } = require("bullmq");
new Worker("imageQueue", async job => {
await processImage(job.data);
});
- Bu kod görevleri sırayla işler. İşlem ana uygulamadan bağımsızdır.
8. Bull Board ile Görevleri İzleme
app.use("/admin", serverAdapter.getRouter());
- Bu yapı görsel bir panel açar. Görev durumları tarayıcıdan izlenir.
Erişim yolu:
http://localhost:3000/admin
❓ Sıkça Sorulan Sorular
-
BullMQ hangi sorunları çözer? Uzun süren işlemleri ana akıştan ayırır.
-
Redis neden gereklidir? Görev bilgileri bellekte hızlı tutulur.
-
Worker çalışmazsa ne olur? Görevler kuyrukta bekler, kaybolmaz.
-
Büyük dosyalar Redis’e eklenmeli mi? Hayır. Dosya yolu eklenmelidir.
-
Production için uygun mu? Evet. Yüksek trafikte idealdir.
Sonuç
Bu rehberde Node.js uygulamasını daha hızlı hale getirdiniz. BullMQ ile uzun işlemleri arka plana taşıdınız. Redis ve worker yapısıyla ölçeklenebilir bir mimari kurdunuz.
Asenkron görev altyapınızı Rabisu Bulut sunucularında güvenle çalıştırabilirsiniz.