MongoDB Change Streams ile .NET 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗶𝗱𝗲 𝗘𝘃𝗲𝗻𝘁𝘀

ASP.NET Core'da gerçek zamanlı güncellemeler istiyorsunuz. Aklınıza ilk olarak WebSockets gelebilir.

Panolar (dashboards) ve akışlar (feeds) için daha basit bir yol var. MongoDB Change Streams ve Server-Sent Events (SSE) kullanabilirsiniz.

Bu kurulum, çok az kodla sunucunuzdan istemcinize tek yönlü akış sağlar.

Nasıl çalışır:

  • MongoDB Change Streams, veritabanı değişikliklerini anında tespit eder.
  • SSE, bu değişiklikleri tek bir HTTP bağlantısı üzerinden tarayıcıya iletir (push eder).
  • Sürekli polling (sorgulama) yapmaktan kaçınarak sunucu kaynaklarından tasarruf edersiniz.

SSE, yerel bir tarayıcı API'sidir. Uzun süreli bir HTTP yanıtı üzerinden çalışır ve otomatik yeniden bağlantıları destekler. Şunlar için mükemmeldir:

  • Canlı zaman çizelgeleri
  • Bildirimler
  • Etkinlik akışları
  • Yönetici panoları

ASP.NET Core Minimal API'lerinde bunu TypedResults.ServerSentEvents kullanarak uygulayabilirsiniz.

Kod akışı şu adımları izler:

  1. Uygulamanız MongoDB'de bir change stream imleci (cursor) açar.
  2. Veriler değiştiğinde MongoDB olaylar (events) yayınlar.
  3. Uygulamanız bu değişiklikleri istemciye eşler.

En büyük avantajlardan biri, akışları devam ettirebilme (resume) yeteneğidir. MongoDB her değişiklik için bir "resume token" sağlar. Bu token'ı Last-Event-ID başlığı (header) üzerinden iletebilirsiniz. Bir tarayıcı yeniden bağlandığında, gördüğü son ID'yi gönderir. Uygulamanız bu ID'yi okur ve MongoDB'ye tam olarak kaldığı yerden başlamasını söyler.

SSE mi yoksa SignalR mı kullanmalısınız?

Şu durumlarda SSE kullanın:

  • Sadece sunucudan istemciye güncellemeler gerekiyorsa.
  • Hafif ve metin tabanlı bir kurulum istiyorsanız.
  • Yerel tarayıcı API'lerini kullanmak istiyorsanız.

Şu durumlarda SignalR kullanın:

  • İki yönlü (bi-directional) iletişime ihtiyacınız varsa.
  • Gruplar veya hub'lar gibi karmaşık özelliklere ihtiyacınız varsa.
  • Otomatik taşıma protokolü müzakeresine (transport negotiation - WebSockets, Long Polling) ihtiyacınız varsa.

Basit canlı akışlar için SSE ile başlayın. SignalR'a yalnızca uygulamanız daha zengin etkileşim gerektirdiğinde geçin.

Not: MongoDB Change Streams, bir replica set veya sharded cluster gerektirir. Tek başına çalışan (standalone) bir sunucuda çalışmazlar.

Kaynak: https://dev.to/mongodb/net-server-side-events-with-mongodb-change-streams-5dfb

İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi