MongoDB Change Streams ನೊಂದಿಗೆ .NET 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗶𝗱𝗲 𝗘𝘃𝗲𝗻𝘁𝘀

ನೀವು ASP.NET Core ನಲ್ಲಿ ರಿಯಲ್-ಟೈಮ್ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಬಯಸುತ್ತೀರಿ. ನೀವು ಮೊದಲು WebSockets ಬಗ್ಗೆ ಯೋಚಿಸಬಹುದು.

ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳು ಮತ್ತು ಫೀಡ್‌ಗಳಿಗಾಗಿ ಇದೊಂದು ಸರಳವಾದ ಮಾರ್ಗವಿದೆ. ನೀವು MongoDB Change Streams ಮತ್ತು Server-Sent Events (SSE) ಅನ್ನು ಬಳಸಬಹುದು.

ಈ ಸೆಟಪ್ ಅತ್ಯಲ್ಪ ಕೋಡ್‌ನೊಂದಿಗೆ ನಿಮ್ಮ ಸರ್ವರ್‌ನಿಂದ ಕ್ಲೈಂಟ್‌ಗೆ ಏಕಮುಖ ಸ್ಟ್ರೀಮಿಂಗ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ.

ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ:

  • MongoDB Change Streams ಡೇಟಾಬೇಸ್ ಬದಲಾವಣೆಗಳನ್ನು ತಕ್ಷಣವೇ ಪತ್ತೆಹಚ್ಚುತ್ತವೆ.
  • SSE ಆ ಬದಲಾವಣೆಗಳನ್ನು ಒಂದೇ HTTP ಕನೆಕ್ಷನ್ ಮೂಲಕ ಬ್ರೌಸರ್‌ನಿಗೆ ತಲುಪಿಸುತ್ತದೆ.
  • ನೀವು ನಿರಂತರ ಪೋಲಿಂಗ್ (polling) ಮಾಡುವುದನ್ನು ತಪ್ಪಿಸಬಹುದು, ಇದು ಸರ್ವರ್ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಉಳಿಸುತ್ತದೆ.

SSE ಎಂಬುದು ಒಂದು ನೇಟಿವ್ ಬ್ರೌಸರ್ API ಆಗಿದೆ. ಇದು ದೀರ್ಘಕಾಲದ HTTP ರೆಸ್ಪಾನ್ಸ್ ಮೂಲಕ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಮತ್ತು ಆಟೋಮ್ಯಾಟಿಕ್ ರೀಕನೆಕ್ಟ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. ಇದು ಇವುಗಳಿಗೆ ಸೂಕ್ತವಾಗಿದೆ:

  • ಲೈವ್ ಟೈಮ್‌ಲೈನ್‌ಗಳು
  • ನೋಟಿಫಿಕೇಶನ್‌ಗಳು
  • ಆಕ್ಟಿವಿಟಿ ಫೀಡ್‌ಗಳು
  • ಅಡ್ಮಿನ್ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳು

ASP.NET Core Minimal APIs ನಲ್ಲಿ, ನೀವು TypedResults.ServerSentEvents ಬಳಸಿ ಇದನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸಬಹುದು.

ಕೋಡ್ ಫ್ಲೋ ಈ ಹಂತಗಳನ್ನು ಅನುಸರಿಸುತ್ತದೆ:

  1. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ MongoDB ನಲ್ಲಿ ಚೇಂಜ್ ಸ್ಟ್ರೀಮ್ ಕರ್ಸರ್ ಅನ್ನು ತೆರೆಯುತ್ತದೆ.
  2. ಡೇಟಾ ಬದಲಾದಾಗ MongoDB ಇವೆಂಟ್‌ಗಳನ್ನು ಹೊರಸೂಸುತ್ತದೆ.
  3. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಈ ಬದಲಾವಣೆಗಳನ್ನು ಕ್ಲೈಂಟ್‌ಗೆ ಮ್ಯಾಪ್ ಮಾಡುತ್ತದೆ.

ಸ್ಟ್ರೀಮ್‌ಗಳನ್ನು ಪುನರಾರಂಭಿಸುವ (resume) ಸಾಮರ್ಥ್ಯವು ಇದರ ಒಂದು ಪ್ರಮುಖ ಪ್ರಯೋಜನವಾಗಿದೆ. MongoDB ಪ್ರತಿಯೊಂದು ಬದಲಾವಣೆಗಾಗಿ ಒಂದು resume token ಅನ್ನು ಒದಗಿಸುತ್ತದೆ. ನೀವು ಈ ಟೋಕನ್ ಅನ್ನು Last-Event-ID ಹೆಡರ್ ಮೂಲಕ ಕಳುಹಿಸಬಹುದು. ಬ್ರೌಸರ್ ಮರುಸಂಪರ್ಕಗೊಂಡಾಗ, ಅದು ತಾನು ನೋಡಿದ ಕೊನೆಯ ID ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಈ ID ಅನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಿ ನಿಂತಿದೆಯೋ ಅಲ್ಲಿಂದಲೇ ಪ್ರಾರಂಭಿಸಲು MongoDB ಗೆ ಸೂಚಿಸುತ್ತದೆ.

SSE ಮತ್ತು SignalR ನಡುವೆ ನೀವು ಯಾವಾಗ ಯಾವುದನ್ನು ಬಳಸಬೇಕು?

ಈ ಸಂದರ್ಭಗಳಲ್ಲಿ SSE ಬಳಸಿ:

  • ನಿಮಗೆ ಕೇವಲ ಸರ್ವರ್-ಟು-ಕ್ಲೈಂಟ್ ಅಪ್‌ಡೇಟ್‌ಗಳ ಅಗತ್ಯವಿದ್ದರೆ.
  • ನೀವು ಲೈಟ್‌ವೇಯ್ಟ್, ಪಠ್ಯ ಆಧಾರಿತ (text-based) ಸೆಟಪ್ ಬಯಸುತ್ತಿದ್ದರೆ.
  • ನೀವು ನೇಟಿವ್ ಬ್ರೌಸರ್ APIಗಳನ್ನು ಬಳಸಲು ಬಯಸುತ್ತಿದ್ದರೆ.

ಈ ಸಂದರ್ಭಗಳಲ್ಲಿ SignalR ಬಳಸಿ:

  • ನಿಮಗೆ ದ್ವಿಮುಖ (bi-directional) ಸಂವಹನದ ಅಗತ್ಯವಿದ್ದರೆ.
  • ನಿಮಗೆ ಗ್ರೂಪ್‌ಗಳು ಅಥವಾ ಹಬ್‌ಗಳಂತಹ ಸಂಕೀರ್ಣ ವೈಶಿಷ್ಟ್ಯಗಳ ಅಗತ್ಯವಿದ್ದರೆ.
  • ನಿಮಗೆ ಆಟೋಮ್ಯಾಟಿಕ್ ಟ್ರಾನ್ಸ್‌ಪೋರ್ಟ್ ನೆಗೋಷಿಯೇಷನ್ (WebSockets, Long Polling) ಅಗತ್ಯವಿದ್ದರೆ.

ಸರಳ ಲೈವ್ ಫೀಡ್‌ಗಳಿಗಾಗಿ SSE ಇಂದ ಪ್ರಾರಂಭಿಸಿ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಹೆಚ್ಚಿನ ಸಂವಹನ (richer interaction) ಅಗತ್ಯವಿದ್ದಾಗ ಮಾತ್ರ SignalR ಗೆ ಬದಲಾಯಿಸಿ.

ಗಮನಿಸಿ: MongoDB Change Streams ಗೆ replica set ಅಥವಾ sharded cluster ಅಗತ್ಯವಿದೆ. ಅವು ಸ್ಟ್ಯಾಂಡ್‌ಅಲೋನ್ ಸರ್ವರ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ.

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

Optional learning community: https://t.me/GyaanSetuAi