Ana içeriğe geç

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

  1. Görsel işleme CPU yoğun bir iştir.
  2. İş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

  1. BullMQ hangi sorunları çözer? Uzun süren işlemleri ana akıştan ayırır.

  2. Redis neden gereklidir? Görev bilgileri bellekte hızlı tutulur.

  3. Worker çalışmazsa ne olur? Görevler kuyrukta bekler, kaybolmaz.

  4. Büyük dosyalar Redis’e eklenmeli mi? Hayır. Dosya yolu eklenmelidir.

  5. 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.