Quartz.NET Scheduled Jobs
Quartz.NET से jobs और triggers परिभाषित करें, cron expressions का उपयोग करें और ASP.NET Core DI के साथ एकीकृत करें।
Quartz.NET Scheduled Jobs, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Quartz.NET क्यों
जब आपको क्रॉन अभिव्यक्तियाँ, जॉब का स्थायी संग्रहण, क्लस्टरिंग, पुनःप्रयास नीतियाँ और जॉब शृंखलाएँ चाहिए हों, तो Quartz.NET PeriodicTimer से आगे बढ़कर उत्पादन-स्तर का शेड्यूलर उपलब्ध कराता है। यह लोकप्रिय Java Quartz शेड्यूलर का .NET संस्करण है।
Quartz.NET इंस्टॉल करना
Quartz और Quartz.AspNetCore पैकेज जोड़ें। ASP.NET एकीकरण शेड्यूलर को होस्ट की जाने वाली सेवा के रूप में स्वचालित रूप से पंजीकृत करता है।
# Install packages
dotnet add package Quartz
dotnet add package Quartz.AspNetCore
# Optional: persistence (requires Quartz.Serialization.Json too)
# dotnet add package Quartz.Jobs
# dotnet add package Quartz.Pluginsजॉब परिभाषित करना
IJob (या नए Quartz में IAsyncJob) को Execute विधि के साथ लागू करें। जॉब का संदर्भ रनटाइम डेटा और वर्तमान ट्रिगर की जानकारी उपलब्ध कराता है।
using Quartz;
[DisallowConcurrentExecution] // prevent overlapping executions
public class ReportGeneratorJob : IJob
{
private readonly IReportService _reports;
private readonly ILogger<ReportGeneratorJob> _logger;
public ReportGeneratorJob(IReportService r, ILogger<ReportGeneratorJob> l)
{ _reports = r; _logger = l; }
public async Task Execute(IJobExecutionContext context)
{
_logger.LogInformation("Generating report at {Time}", DateTime.UtcNow);
await _reports.GenerateDailyReportAsync(context.CancellationToken);
_logger.LogInformation("Report generated");
}
}ASP.NET Core में Quartz पंजीकृत करना
शेड्यूलर को कॉन्फ़िगर करने के लिए AddQuartz और उसे IHostedService के रूप में चलाने के लिए AddQuartzHostedService का उपयोग करें। जॉब और ट्रिगर lambda में कॉन्फ़िगर किए जाते हैं।
builder.Services.AddQuartz(q =>
{
q.UseMicrosoftDependencyInjectionJobFactory();
var jobKey = new JobKey("ReportGenerator");
q.AddJob<ReportGeneratorJob>(opts => opts.WithIdentity(jobKey));
q.AddTrigger(opts => opts
.ForJob(jobKey)
.WithIdentity("ReportTrigger")
.WithCronSchedule("0 0 8 * * ?") // 8:00 AM daily
);
});
builder.Services.AddQuartzHostedService(q =>
q.WaitForJobsToComplete = true);क्रॉन अभिव्यक्ति का सिंटैक्स
Quartz में 6 या 7 फ़ील्ड वाली क्रॉन अभिव्यक्ति का उपयोग होता है: seconds minutes hours day-of-month month day-of-week [year]। Quartz का क्रॉन Unix क्रॉन से थोड़ा अलग है—इसमें seconds सबसे पहले होते हैं।
// Quartz cron format: sec min hour dom month dow [year]
"0 0 8 * * ?" // Every day at 8:00 AM
"0 0/30 9-17 * * ?" // Every 30 min, 9 AM - 5 PM weekdays
"0 0 0 1 * ?" // First day of every month at midnight
"0 0 6 ? * MON-FRI" // Every weekday at 6 AM
"0 0/5 * * * ?" // Every 5 minutes
// Tip: use cronmaker.com or crontab.guru to build expressionsसरल ट्रिगर
क्रॉन की जटिलता के बिना अंतराल-आधारित समय-सारणी के लिए WithSimpleSchedule के साथ सरल ट्रिगर का उपयोग करें।
q.AddTrigger(opts => opts
.ForJob(jobKey)
.WithIdentity("CleanupTrigger")
.StartNow()
.WithSimpleSchedule(s => s
.WithIntervalInHours(1)
.RepeatForever())
);
// Or a one-shot trigger:
q.AddTrigger(opts => opts
.ForJob(jobKey)
.WithIdentity("OneShot")
.StartAt(DateTimeOffset.UtcNow.AddMinutes(5)));जॉब डेटा मैप
रनटाइम पैरामीटर जॉब में भेजने के लिए JobDataMap का उपयोग करें। context.JobDetail.JobDataMap के माध्यम से Execute के अंदर इन तक पहुँचें।
q.AddJob<EmailJob>(opts => opts
.WithIdentity("EmailJob")
.UsingJobData("to", "admin@example.com")
.UsingJobData("subject", "Daily Digest"));
// Inside the job:
public async Task Execute(IJobExecutionContext context)
{
var to = context.JobDetail.JobDataMap.GetString("to");
var subject = context.JobDetail.JobDataMap.GetString("subject");
await _mailer.SendAsync(to!, subject!, "body");
}DisallowConcurrentExecution
[DisallowConcurrentExecution] किसी जॉब के पिछले इंस्टेंस के चलने के दौरान उसके नए इंस्टेंस को शुरू होने से रोकता है। साझा संसाधनों तक पहुँचने वाले जॉब के लिए यह आवश्यक है।
[DisallowConcurrentExecution]
public class InventorySyncJob : IJob
{
// If a sync takes > 1 minute and triggers every minute,
// the next trigger is delayed until this one completes
public async Task Execute(IJobExecutionContext context)
{
await SyncInventoryAsync(context.CancellationToken);
}
}
// Without [DisallowConcurrentExecution], multiple instances
// could run in parallel, causing data conflicts.अपवाद प्रबंधन और पुनःप्रयास
जॉब के कोड को try/catch में लपेटें। Quartz को जॉब तुरंत या कुछ विलंब के बाद फिर से चलाने का संकेत देने के लिए JobExecutionException फेंकें।
public async Task Execute(IJobExecutionContext context)
{
try
{
await ProcessAsync(context.CancellationToken);
}
catch (TransientException ex)
{
// Ask Quartz to retry immediately
var jobException = new JobExecutionException(ex)
{
RefireImmediately = true
};
throw jobException;
}
catch (Exception ex)
{
_logger.LogError(ex, "Job failed — not retrying");
// Don't rethrow — job is done
}
}वास्तविक उदाहरण: बहु-जॉब शेड्यूलर
एक उत्पादन-स्तर का Quartz सेटअप, जिसमें अलग-अलग समय-सारणी पर कई जॉब चलते हैं और सभी सेवाओं के लिए DI का उपयोग करते हैं।
builder.Services.AddQuartz(q =>
{
q.UseMicrosoftDependencyInjectionJobFactory();
// Daily report at 8 AM
var reportKey = new JobKey("DailyReport");
q.AddJob<ReportGeneratorJob>(o => o.WithIdentity(reportKey));
q.AddTrigger(o => o.ForJob(reportKey)
.WithCronSchedule("0 0 8 * * ?"));
// Inventory sync every 15 minutes
var syncKey = new JobKey("InventorySync");
q.AddJob<InventorySyncJob>(o => o.WithIdentity(syncKey));
q.AddTrigger(o => o.ForJob(syncKey)
.WithSimpleSchedule(s => s
.WithIntervalInMinutes(15)
.RepeatForever()));
// Cache cleanup every night at 2 AM
var cacheKey = new JobKey("CacheCleanup");
q.AddJob<CacheCleanupJob>(o => o.WithIdentity(cacheKey));
q.AddTrigger(o => o.ForJob(cacheKey)
.WithCronSchedule("0 0 2 * * ?"));
});त्वरित जाँच
Quartz.NET जॉब पर [DisallowConcurrentExecution] एट्रिब्यूट लगाने से क्या होता है?
पुनरावृत्ति: Quartz.NET निर्धारित जॉब
मुख्य बातें:
- Quartz.NET: क्रॉन, स्थायी संग्रहण और क्लस्टरिंग वाला उत्पादन-स्तर का शेड्यूलर
- IJob को Execute विधि के साथ लागू करके जॉब परिभाषित करें
- AddQuartz + AddQuartzHostedService के साथ पंजीकृत करें; जॉब DI का उपयोग कर सकते हैं
- क्रॉन प्रारूप: seconds minutes hours dom month dow — ध्यान दें कि seconds सबसे पहले होते हैं
[DisallowConcurrentExecution]: दोबारा चलाने से पहले वर्तमान निष्पादन के पूरा होने की प्रतीक्षा करता है- रनटाइम पैरामीटर जॉब में भेजने के लिए JobDataMap का उपयोग करें
एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “Quartz.NET Scheduled Jobs” पाठ निःशुल्क है?
हाँ—“Quartz.NET Scheduled Jobs” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Quartz.NET Scheduled Jobs” में मैं क्या सीखूँगा?
Quartz.NET से jobs और triggers परिभाषित करें, cron expressions का उपयोग करें और ASP.NET Core DI के साथ एकीकृत करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Quartz.NET Scheduled Jobs” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- IHostedService और BackgroundService
- Worker Service Projects
- Periodic Tasks और Timers
- Quartz.NET Scheduled Jobs