सूचनाएँ और इवेंट
MediatR से डोमेन इवेंट प्रकाशित करें।
सूचनाएँ और इवेंट, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
अनुरोध बनाम सूचनाएँ
किसी अनुरोध का एक handler होता है और वह एक मान लौटाता है। सूचना प्रसारण होती है: उसके शून्य या अधिक handler हो सकते हैं और वह कुछ नहीं लौटाती। किसी घटना की घोषणा करने के लिए सूचनाओं का उपयोग करें।
// Request: one handler, returns a result
// Notification: many handlers, fire-and-forgetINotification
डोमेन घटना INotification लागू करने वाला एक रिकॉर्ड होती है। यह भूतकाल में व्यक्त किसी तथ्य का वर्णन करती है।
public record OrderPlacedNotification(int OrderId, int CustomerId)
: INotification;INotificationHandler
हर सब्सक्राइबर INotificationHandler<TNotification> को लागू करता है। एक ही नोटिफ़िकेशन के लिए कई हैंडलर सब्सक्राइब कर सकते हैं और हर हैंडलर उसे स्वतंत्र रूप से संभालता है।
public class SendConfirmationEmailHandler
: INotificationHandler<OrderPlacedNotification>
{
public Task Handle(
OrderPlacedNotification n, CancellationToken ct)
{
// send the email...
return Task.CompletedTask;
}
}एकाधिक सब्सक्राइबर
जितने हैंडलर आवश्यक हों, उतने जोड़ें। इनमें से कोई भी दूसरे हैंडलर के बारे में नहीं जानता—इसलिए पब्लिशर को छुए बिना नई प्रतिक्रियाएँ जोड़ी जा सकती हैं।
public class UpdateInventoryHandler
: INotificationHandler<OrderPlacedNotification>
{
public Task Handle(OrderPlacedNotification n, CancellationToken ct)
{
// decrement stock...
return Task.CompletedTask;
}
}प्रकाशित करना
नोटिफ़िकेशन उठाने के लिए IPublisher (या IMediator) इंजेक्ट करें और Publish को कॉल करें। पंजीकृत हर हैंडलर को चलाया जाता है।
public class CreateOrderHandler(AppDbContext db, IPublisher publisher)
: IRequestHandler<CreateOrderCommand, int>
{
public async Task<int> Handle(CreateOrderCommand c, CancellationToken ct)
{
var order = new Order { CustomerId = c.CustomerId };
db.Orders.Add(order);
await db.SaveChangesAsync(ct);
await publisher.Publish(
new OrderPlacedNotification(order.Id, c.CustomerId), ct);
return order.Id;
}
}साइड इफ़ेक्ट्स को अलग करना
नोटिफ़िकेशन मुख्य उपयोग-प्रवाह को केंद्रित रखते हैं। ऑर्डर रखने पर केवल ऑर्डर दर्ज किया जाता है और एक इवेंट प्रकाशित किया जाता है; ईमेल भेजना और इन्वेंट्री का प्रबंधन अपने-अपने हैंडलर में रहता है। यह ओपन/क्लोज़्ड सिद्धांत का व्यावहारिक उदाहरण है।
// CreateOrderHandler does NOT know about email or inventoryप्रकाशन रणनीति
डिफ़ॉल्ट रूप से MediatR हर नोटिफ़िकेशन हैंडलर का क्रमिक रूप से इंतज़ार करता है। यदि कोई हैंडलर अपवाद उत्पन्न करता है, तो उसके बाद वाले हैंडलर नहीं चलते। उन्हें समानांतर रूप से चलाने के लिए आप कस्टम पब्लिशर दे सकते हैं।
builder.Services.AddMediatR(cfg =>
{
cfg.RegisterServicesFromAssembly(typeof(Program).Assembly);
cfg.NotificationPublisher = new TaskWhenAllPublisher();
});विफलताओं को संभालना
क्योंकि हैंडलर स्वतंत्र होते हैं, इसलिए तय करें कि विफलता का क्या अर्थ होना चाहिए। गैर-महत्वपूर्ण साइड इफ़ेक्ट्स के लिए हैंडलर के भीतर अपवाद पकड़कर लॉग करें, ताकि एक विफलता दूसरे हैंडलर को न रोके।
public async Task Handle(OrderPlacedNotification n, CancellationToken ct)
{
try { await _email.SendAsync(n.CustomerId, ct); }
catch (Exception ex) { _logger.LogError(ex, "email failed"); }
}डोमेन इवेंट पैटर्न
एक सामान्य पैटर्न यह है: इकाइयाँ डोमेन इवेंट एकत्र करती हैं और लेन-देन सहेजने के बाद उन सभी को प्रकाशित किया जाता है। इससे यह सुनिश्चित होता है कि इवेंट केवल बदलाव के कमिट होने पर ही चलें।
await db.SaveChangesAsync(ct);
foreach (var domainEvent in order.Events)
await publisher.Publish(domainEvent, ct);
order.Events.Clear();नोटिफ़िकेशन बनाम संदेश कतारें
MediatR नोटिफ़िकेशन प्रक्रिया के भीतर चलते हैं और अनुरोध के दौरान समकालिक होते हैं। सेवाओं के बीच या स्थायी डिलीवरी के लिए इसके बजाय किसी वास्तविक संदेश ब्रोकर (जैसे RabbitMQ या Azure Service Bus) पर प्रकाशित करें।
// In-process reactions -> MediatR notifications
// Cross-service / durable -> message brokerनोटिफ़िकेशन का परीक्षण
आप एक मॉक IPublisher देकर और यह सुनिश्चित करके जाँच सकते हैं कि उसे कॉल किया गया था, कि हैंडलर सही इवेंट प्रकाशित करता है।
var publisher = new Mock<IPublisher>();
var handler = new CreateOrderHandler(db, publisher.Object);
await handler.Handle(new CreateOrderCommand(1, []), default);
publisher.Verify(p => p.Publish(
It.IsAny<OrderPlacedNotification>(), default), Times.Once);त्वरित जाँच
नोटिफ़िकेशन मॉडल की पुष्टि करें।
पुनरावलोकन
आपने नोटिफ़िकेशन और इवेंट के बारे में सीखा:
INotificationएक प्रसारण है, जिसके लिए शून्य या अधिकINotificationHandlerहो सकते हैं।- सभी सब्सक्राइबर को चलाने के लिए
IPublisher.Publishसे प्रकाशित करें। - नोटिफ़िकेशन साइड इफ़ेक्ट्स को अलग करते हैं और ओपन/क्लोज़्ड सिद्धांत का पालन करते हैं।
- वे प्रक्रिया के भीतर चलते हैं; सेवाओं के बीच या स्थायी इवेंट के लिए ब्रोकर का उपयोग करें।
इसके साथ CQRS और MediatR पाठ्यक्रम पूरा होता है।
एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “सूचनाएँ और इवेंट” पाठ निःशुल्क है?
हाँ—“सूचनाएँ और इवेंट” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“सूचनाएँ और इवेंट” में मैं क्या सीखूँगा?
MediatR से डोमेन इवेंट प्रकाशित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“सूचनाएँ और इवेंट” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- CQRS अवधारणाएँ
- MediatR के साथ कमांड और हैंडलर
- पाइपलाइन व्यवहार
- सूचनाएँ और इवेंट