Ugrás a tartalomhoz
← Blog'a dön

Logistics Flow neden BullMQ değil, RabbitMQ üzerinde çalışıyor

Diğer tüm Nortinia ürünleri kuyruklar için BullMQ kullanıyor. Lojistik ise istisna. İşte RabbitMQ'nun neden kazandığı.

Kuyruk seçimi asla teknik bir soru değildir — bir mesaj kaybolduğunda kimin sorumlu olacağı sorusudur.

Netorigo altyapısı varsayılan olarak BullMQ kullanır: Redis zaten mevcut, geliştiriciler onu tanıyor ve çoğu iş için fazlasıyla yeterli. Yine de Logistics Flow (netorigo-app-logistics reposu) bu kalıbı bozdu ve RabbitMQ'yu seçti. Mesele “daha iyi teknoloji” değildi — üç somut nedene dayanıyordu.

1. neden: konu (topic) bazlı yönlendirme

Tek bir kargo olayı (ör. shipment.created.hu.budapest) yedi tüketiciye dağılır: gümrük, depo, filo, faturalama, müşteri bildirimi, analitik, denetim. Bir RabbitMQ topic exchange bunu tek bir yayınla halleder — BullMQ ile aynı akış 7 kuyruk ve 7 yazma anlamına gelirdi.

2. neden: birinci sınıf vatandaş olarak dead letter queue

  • Lojistik olaylarının kabaca %1'i doğrulama hatasına takılır
  • Bunlar gözden çıkarılabilir mesajlar değildir — her gönderi gerçek bir yüktür
  • RabbitMQ'da DLQ yerleşiktir ve arayüzden yeniden oynatılabilir
  • BullMQ'da yeniden deneme / başarısız durumunu ayırmak daha zordur
  • Sorumlu bir kişi DLQ'yu her gün inceler

3. neden: kuyruk derinliği izleme

RabbitMQ yerel Prometheus metrikleri sunar: kuyruk derinliği, yayın hızı, tüketici sayısı, onay (ack) hızı. Grafana'da tek tıkla hangi tüketicinin yavaşladığı görülür. BullMQ ile aynısını elle geliştirmemiz gerekirdi ve depo ekibi 4 hafta sonra canlıya geçerdi.

Ders şu: kuyruğu teknik savunmaya göre seçmeyin. Bir mesaj kaybolduğunda kimin hesap vereceğine göre seçin. RabbitMQ bu sorumluluğu daha net hale getirir.

Geçişten sonra öğrendiklerimiz

  • RabbitMQ bellek sınırını her zaman yapılandırın — aksi halde kontrolden çıkan tek bir tüketici broker'ı tıkar
  • Publisher confirms varsayılan olarak kapalıdır; açın, aksi halde teslimat garanti edilmez
  • Kuyruk tanımlarını arayüzden tıklayarak değil, kodda tutun — aksi halde felaket kurtarmada uygulanacak bir şey olmaz
  • Grafana kontrol panelini yalnızca geliştiriciler değil, operasyon ekibi de kullanmalı — daha iyi SLA algısı
  • Staging ve canlı ortam ayrı vhost'larda olmalı, asla aynısında değil

Bir şeyi daha söylemekte fayda var: BullMQ lojistik reposundan kaybolmadı. Kısa, hafif işler (e-posta gönderimi, cron tetikleyicileri, önbellek ısıtma) için BullMQ hâlâ çalışıyor. RabbitMQ yalnızca gerçek iş olaylarını taşıyor. İkisi arasındaki fark doğru kullanımdadır — hiçbiri diğerinden “daha iyi” değildir.

Bir konuyu ele almamızı ister misiniz?

Bize yazın — bu konuda gerçek deneyimimiz varsa yayımlarız.