C# (.NET) में कार्य कतारें: System.Threading.Channels, Hangfire और RabbitMQ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# (.NET) के लिए कार्य कतारें: सरल से जटिल तक



C# (.NET) में आधुनिक विकास शायद ही कभी पृष्ठभूमि कार्यों, विलंबित प्रसंस्करण और अतुल्यकालिक संचालन के बिना होता है। कार्य कतारें (Job Queues / Message Queues) एक प्रमुख पैटर्न हैं, जो एप्लिकेशन के मुख्य थ्रेड को अनलोड करने, संदेश वितरण की गारंटी देने और प्रसंस्करण को स्केल करने की अनुमति देते हैं। इस लेख में, हम .NET में कतारों को लागू करने के तीन लोकप्रिय तरीकों पर विचार करेंगे: अंतर्निहित System.Threading.Channels, शक्तिशाली शेड्यूलर Hangfire और औद्योगिक संदेश ब्रोकर RabbitMQ जिसमें .NET के लिए क्लाइंट है।



1. System.Threading.Channels — .NET में अंतर्निहित कतार



System.Threading.Channels एक हल्की, थ्रेड-सुरक्षित कतार है, जो सीधे .NET (.NET Core 2.1 से शुरू) में उपलब्ध है। यह एक ही प्रक्रिया के भीतर 'उत्पादक-उपभोक्ता' परिदृश्यों के लिए आदर्श है।



मुख्य विशेषताएं:

  • अतुल्यकालिक पढ़ना और लिखना (await writer.WriteAsync(), await reader.ReadAsync())।
  • सीमित और असीमित चैनल (Bounded / Unbounded)।
  • CancellationToken के माध्यम से रद्दीकरण का समर्थन।
  • बैच रीडिंग (ReadAllAsync)।


उदाहरण: सरल कार्य कतार

using System.Threading.Channels;

// 100 तत्वों के बफर के साथ एक चैनल बनाएंvar channel = Channel.CreateBounded<string>(100);

// उत्पादक: कार्य जोड़ेंvar producer = Task.Run(async () =>{ for (int i = 0; i < 10; i++) { await channel.Writer.WriteAsync($"कार्य {i}"); await Task.Delay(100); } channel.Writer.Complete(); // समाप्ति का संकेत});

// उपभोक्ता: कार्यों को संसाधित करेंvar consumer = Task.Run(async () =>{ await foreach (var item in channel.Reader.ReadAllAsync()) { Console.WriteLine($"संसाधित: {item}"); }});

await Task.WhenAll(producer, consumer);


लाभ: शून्य निर्भरता, उच्च प्रदर्शन, एक ही एप्लिकेशन में in-memory कतारों के लिए आदर्श।
नुकसान: वितरित प्रणालियों के लिए उपयुक्त नहीं है — पुनरारंभ होने पर डेटा खो जाता है।



2. Hangfire — उन्नत पृष्ठभूमि कार्य शेड्यूलर



Hangfire .NET के लिए एक लोकप्रिय लाइब्रेरी है, जो न केवल एक कतार लागू करती है, बल्कि एक वेब डैशबोर्ड, स्थायित्व (SQL Server, Redis, PostgreSQL), पुनः प्रयास और CRON शेड्यूल भी प्रदान करती है।



प्रमुख विशेषताएं:

  • Fire-and-forget (एक बार चलाएं)।
  • विलंबित कार्य (Delayed)।
  • आवर्ती कार्य (Recurring) — Windows Task Scheduler का विकल्प।
  • अनुकूलन योग्य नीति के साथ स्वचालित retry।
  • अंतर्निहित निगरानी (डैशबोर्ड)।


उदाहरण: Hangfire की मूल सेटअप

// स्थापना: Install-Package Hangfireusing Hangfire;using Hangfire.SqlServer;

// Program.cs में कॉन्फ़िगरेशन (.NET 6+)var builder = WebApplication.CreateBuilder(args);builder.Services.AddHangfire(config => config.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireDb")));builder.Services.AddHangfireServer();

var app = builder.Build();app.UseHangfireDashboard(); // /hangfire

// कार्य जोड़नाBackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!"));BackgroundJob.Schedule(() => Console.WriteLine("5 मिनट में"), TimeSpan.FromMinutes(5));RecurringJob.AddOrUpdate("my-job", () => Console.WriteLine("हर मिनट"), Cron.Minutely);

app.Run();


लाभ: समृद्ध कार्यक्षमता, पुनरारंभ के बीच स्थिति संरक्षण, तैयार UI।
नुकसान: डेटाबेस की आवश्यकता है, उच्च-लोड वितरित प्रणालियों के लिए उपयुक्त नहीं है (मोनोलिथ के लिए अनुकूलित)।



3. RabbitMQ + .NET — वितरित संदेश कतार



RabbitMQ

अनुशंसाएँ