CodeBlanks Logo Icon CodeBlanks

Retry ve backoff

Bull retry ve backoff stratejilerini öğrenirsin.

Retry ve backoff

Bir mesaj işlenirken hata olursa, Bull otomatik yeniden dener (retry). Backoff, denemeler arasındaki bekleme süresidir. Sabit veya üstel (exponential) backoff kullanılabilir. Bu, geçici hataları otomatik aşmayı sağlar.

Örnek: queue.add(veri, { attempts: 3, backoff: { type: "exponential", delay: 1000 } });. Bu, iş en fazla 3 kez denenir; her deneme arası üstel artar (1s, 2s, 4s). Backoff olmadan, hatalı bir iş sürekli anında denenir ve sistemi yorar. Backoff, geçici ağ hataları veya servis kesintileri için idealdir. attempts ve backoff birlikte kullanılır; attempts deneme sayısını, backoff bekleme süresini belirler. Tüm denemeler başarısız olursa iş kalıcı başarısız sayılır ve queue.on("failed", ...) tetiklenir.

Backoff türleri

İki backoff türü vardır: fixed (her deneme arası sabit bekleme) ve exponential (bekleme süresi üstel artar). Exponential, sistemi korur; her deneme daha fazla bekler.

Örnek: { type: "fixed", delay: 2000 } her deneme arası 2 saniye bekler. { type: "exponential", delay: 1000 } 1s, 2s, 4s, 8s şeklinde artar. Exponential, uzun süreli kesintilerde sistemi yormaz; ilk denemeler hızlı, sonrakıler yavaştır. Fixed, kısa ve öngörülebilir bekleme istendiğinde uygundur. Backoff delay'i milisaniyedir. Bull ayrıca özel backoff stratejileri de tanımlamaya izin verir; ama fixed ve exponential çoğu durum için yeterlidir.

Uygulama Retry ve backoff ekle

Aşağıdaki kuyruk nesnesini kullan. kuyruk.add({ aksiyon: "email" }, { attempts: 3, backoff: { type: "exponential", delay: 1000 } }) ile retry ve backoff ekle (await kullan). console.log ile "Retry ayarlandı" yaz.

Başlangıç kodu

index.js
const Bull = require("bull");
const kuyruk = new Bull("is-kuyrugu");

// async fonksiyon içinde attempts ve backoff ile mesaj ekle
// buraya yaz

// "Retry ayarlandı" yazdır
// buraya yaz

Örnek çözüm

index.js
const Bull = require("bull");
const kuyruk = new Bull("is-kuyrugu");
async function ekle() {
  await kuyruk.add({ aksiyon: "email" }, { attempts: 3, backoff: { type: "exponential", delay: 1000 } });
}
ekle();
console.log("Retry ayarlandı");

Beklenen çıktı

Retry ayarlandı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 attempts değerini tamamla

Soru
queue.add(data, { ____: 3, backoff: { type: "exponential", delay: 1000 } });
Cevap
queue.add(data, { attempts: 3, backoff: { type: "exponential", delay: 1000 } });

Açıklama: attempts deneme sayısını belirler.

2 Türü özelliğine eşle

Kavram Anlamı
fixed Sabit bekleme
exponential Üstel artan bekleme
attempts Deneme sayısı
delay Bekleme süresi (ms)

3 Backoff neden kullanılır?

index.js
{ attempts: 3, backoff: { type: "exponential" } }
  • Redis'i yedeklemek için
  • Daha hızlı yanıt vermek için
  • Geçici hataları otomatik aşmak için Doğru cevap
  • Kullanıcı arayüzünü güncellemek için

Açıklama: Backoff geçici hataları otomatik aşar.

İleri seviye bölümündeki tüm dersler