Bir sipariş geldiğinde fatura kesmek, stok düşmek, kargo kaydı açmak ve müşteriye e-posta göndermek gerekiyor. Bunların hepsini kullanıcı beklerken tek seferde yapmak hem yavaştır hem de birinde hata olursa tüm işlem çöker. Mesaj kuyrukları, bu işleri birbirinden ayırır.
Temel mantık
- Üretici (producer): "Sipariş oluşturuldu" mesajını kuyruğa bırakır ve işine devam eder.
- Kuyruk: Mesajı güvenle saklar.
- Tüketici (consumer): Mesajı alır ve işler: fatura, kargo, e-posta.
Kullanıcı siparişin alındığını anında görür; diğer işler arka planda yürür.
Faydaları
- Hız: Kullanıcı yavaş işlemleri beklemez.
- Dayanıklılık: E-posta servisi geçici olarak çökse bile mesajlar kuyrukta bekler, servis düzelince işlenir.
- Ölçeklenebilirlik: Yoğun dönemlerde tüketici sayısı artırılabilir.
- Bağımsızlık: Sistemler birbirinin iç yapısını bilmeden haberleşir.
Kullanım alanları
- Sipariş sonrası işlemler
- Toplu e-posta ve SMS gönderimi. Bkz. SMS entegrasyonu.
- Rapor ve PDF oluşturma. Bkz. PDF belge otomasyonu.
- Pazaryeri ve stok senkronizasyonu. Bkz. stok senkronizasyonu.
- Görsel ve belge işleme
Önemli kavramlar
En az bir kez teslim
Çoğu kuyruk sistemi, mesajın kaybolmamasını garanti etmek için aynı mesajı birden fazla kez teslim edebilir. Bu yüzden tüketiciler idempotent yazılmalıdır.
Ölü mektup kuyruğu
Defalarca denenip işlenemeyen mesajlar ayrı bir kuyruğa alınır. Böylece hatalı bir mesaj tüm sistemi tıkamaz ve sonradan incelenebilir.
Sıralama
Bazı işlerde mesajların sırası önemlidir. Kuyruk seçimi ve tasarım bu ihtiyaca göre yapılmalıdır.
Seçenekler
- RabbitMQ: Yaygın kullanılan, açık kaynaklı (Mozilla Public License 2.0) bir mesaj aracısı.
- Bulut kuyrukları: Bulut sağlayıcılarının yönetilen kuyruk hizmetleri; kurulum ve bakım yükü yoktur.
- Veritabanı tabanlı kuyruk: Küçük ölçekli sistemlerde mevcut veritabanında basit bir iş tablosu bile yeterli olabilir.
- Redis: Basit kuyruk ihtiyaçları için kullanılabilir; lisans notları için Redis yazımıza bakın.
Ne zaman gerekmez?
Tek bir uygulama ve az sayıda arka plan işi için kuyruk eklemek gereksiz karmaşıklık getirebilir. .NET'te basit arka plan işleri için BackgroundService çoğu zaman yeterlidir.
Sık sorulan sorular
Kuyruk kullanınca veriler kaybolabilir mi?
Doğru yapılandırılmış kalıcı kuyruklar mesajları güvenle saklar. Önemli olan, tüketicinin mesajı başarıyla işledikten sonra onaylamasıdır.
.NET ile hangi kütüphaneler kullanılır?
Kuyruk sistemlerinin resmî .NET istemcileri ve üzerlerine kurulu daha üst seviye kütüphaneler bulunur. Kütüphanelerin lisanslarını da seçim sırasında kontrol edin.
Sonuç
Mesaj kuyrukları, büyüyen sistemlerde hızı ve dayanıklılığı birlikte sağlar. Mimari değerlendirme için iletişime geçebilirsiniz.