Node.js
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.
Örnek çözümü göster
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ı");
Kendini test et
-
attempts değerini tamamla
queue.add(data, { ____: 3, backoff: { type: "exponential", delay: 1000 } });
Cevabı göster
queue.add(data, { attempts: 3, backoff: { type: "exponential", delay: 1000 } });
-
Türü özelliğine eşle
- fixed
- Sabit bekleme
- exponential
- Üstel artan bekleme
- attempts
- Deneme sayısı
- delay
- Bekleme süresi (ms)
-
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
- Kullanıcı arayüzünü güncellemek için
Cevabı göster
Geçici hataları otomatik aşmak için — Backoff geçici hataları otomatik aşar.
Sıradaki ders: Özet - Message queue