Veri

Marten ile event sourcing'de yazdığın veriyi hemen oku: ProjectLatest ve UpdatedAggregate

Jeremy D. Miller, Marten ve Wolverine'de async projeksiyon kullanırken yazılan verinin hemen okunabilmesi için iki yolu anlatıyor. FetchLatest yerine ProjectLatest ile ekstra veritabanı turu kaldırılıyor, Wolverine'in UpdatedAggregate tipiyle de HTTP ve mesaj handler'larında güncel aggregate dönülebiliyor. Event sourcing kullanan herkes için pratik bir rehber.

Yayın tarihi
Okuma süresi
4 dk okuma
agent çalıştırması #13
agent çalıştırması #13
Orijinale git jeremydmiller.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Async projeksiyon kullanırken okuma tutarlılığı için FetchLatest yerine ProjectLatest tercih edilebilir.
  • ProjectLatest, session içindeki bekleyen event'leri kullanarak ek veritabanı turunu ortadan kaldırır.
  • Inline projeksiyon ve identity map birlikte açıkken FetchLatest zaten ekstra sorgu yapmaz.
  • Wolverine'de handler imzasına UpdatedAggregate eklendiğinde güncel aggregate HTTP yanıtı ya da cascading mesaj olarak döner.
  • Wolverine.HTTP, UpdatedAggregate kullanımında doğru OpenAPI response metadata'sı üretir.

Event sourcing kullanan sistemlerde async projeksiyonlar, yazdığın verinin hemen ardından okunamamasına yol açabilir. Jeremy D. Miller, Marten'in bu sorunu çözmek için sunduğu seçenekleri ve Wolverine ile entegrasyonunu bu yazıda ele alıyor. Yazı, eventual consistency gecikmesi olmadan tek bir stream'in güncel durumunu HTTP endpoint'inden ya da mesaj handler'ından dönmenin yollarını gösteriyor.

Eski FetchLatest API'si her zaman en güncel projeksiyonu getirir ama ayrı bir veritabanı turu gerektirir. ProjectLatest ise session içindeki bekleyen event'leri ve mevcut aggregate verisini kullanarak aynı sonucu ek sorgu olmadan üretiyor. Wolverine tarafında UpdatedAggregate tipi, handler imzasında kullanıldığında güncel aggregate'i HTTP yanıtı ya da cascading mesaj olarak otomatik döndürüyor ve OpenAPI metadata'sını da doğru üretiyor. Orijinal yazıda kod örnekleri ve ayrıntılı kullanım bulunuyor.

Gerçek dünyada kullanımı

  • Blue/green deployment için async projeksiyon kullanan ve HTTP endpoint'inden hemen güncel sipariş durumunu dönmesi gereken bir e-ticaret API'si.
  • Komut alıp yanıt olarak güncel aggregate döndüren, Wolverine ile yazılmış bir CQRS servisi.
  • GraphQL mutation'ı sonrasında istemciye tek stream'in son halini göstermesi gereken bir event sourced uygulama.

Neden önemli

Async projeksiyon kullanan Marten uygulamalarında yazma sonrası okuma tutarsızlığını, ek veritabanı sorgusu eklemeden çözmenin somut yolunu gösteriyor. Wolverine ile birlikte kullanıldığında da handler'a tek bir tip ekleyerek kod yazmadan güncel aggregate dönülebiliyor.

Bu özet, Jeremy D. Miller (The Shade Tree Developer) üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü