Hafta sonu yazılan Node.js kütüphanesi: transactional outbox ve NServiceBus uyumu
Mauro Servienti, NServiceBus transactional session fikrini Node.js'e taşıyan Zusammen kütüphanesini alpha olarak yayımladı. Veri yazımı ile mesaj gönderimi tek bir MongoDB transaction'ında birleşiyor ve RabbitMQ'ya dağıtım için kontrol mesajı ile güvence altına alınıyor. Outbox ve yarış koşulu çözümünü anlamak isteyen .NET geliştiricileri için değerli bir örnek.
Kilit noktalar
- Paket: npm install @zusammen/core@next, şu an alpha sürümü
- Veri ve mesajlar tek MongoDB transaction'ında outbox kaydıyla saklanıyor
- Dağıtım, commit sonrası anında RabbitMQ'ya yapılır; kontrol mesajı yedek yoldur
- Commit penceresi varsayılan 15 saniye; geç gelen commit tombstone ile başarısız olur
- Dağıtım at-least-once'dır, alıcıların idempotent olması gerekir
- createResources varsayılan olarak kapalı; altyapı kaynakları yalnızca doğrulanır
Zusammen, NServiceBus'ın transactional session yaklaşımını Node.js tarafına taşıyan yeni bir alpha kütüphane. Amaç, iş verisi ile dışarı giden mesajların ya birlikte kaydedilmesi ya da hiç kaydedilmemesi. Yazar, kütüphaneyi Node.js bilgisi olmadan, Claude Code ile hafta sonu sürecinde geliştirdiğini anlatıyor ve geliştirme sürecini de adım adım paylaşıyor.
Mesajlar commit'e kadar bellekte bekliyor; commit sırasında outbox kaydıyla birlikte MongoDB transaction'ına yazılıyor ve hemen ardından RabbitMQ'ya gönderiliyor. Önceden gönderilen bir kontrol mesajı, ilk dağıtım başarısız olursa devreye giriyor. Commit gecikirse oluşturulan tombstone kaydı geç gelen commit'i başarısız kılıyor. Paket adı @zusammen/core, şu an @next etiketiyle yayında. Kurulumdan önce README ve ayrıntılı tasarım notlarını incelemek faydalı olur.
Gerçek dünyada kullanımı
- Node.js ile yazılmış bir servisin sipariş kaydedip RabbitMQ'ya olay yayınladığı, veri tutarlılığının kritik olduğu senaryolar
- NServiceBus ile konuşan polyglot bir mikroservis mimarisinde Node.js tarafına uyumlu mesaj gönderimi
- Outbox ve transactional session desenini .NET'teki uygulamasıyla karşılaştırmak isteyen ekipler
Neden önemli
.NET ekipleri için outbox ve transactional session mantığının farklı bir dilde nasıl uygulandığını görmek, dağıtık mesajlaşmada veri ve mesaj tutarlılığını düşünmek için iyi bir örnek. Yazarın yaşadığı tasarım tartışmaları, yarış koşulları ve test bulguları da kendi outbox uygulamalarınızı gözden geçirmenize yardımcı olabilir.