Retry ve backoff
- Node.js kursu
- İleri seviye
- Ders 59/83
- 5 dk
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
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
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
queue.add(data, { ____: 3, backoff: { type: "exponential", delay: 1000 } });
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?
{ 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.