معرفی
در این مقاله نحوه ایجاد یک سرویس پنجره با .NET Core با استفاده از عبارت Quartz Cron را یاد می گیریم. و یک برنامه را به عنوان یک سرویس ویندوز روی ماشین سرور میزبانی کنید.
مرحله 1
برای شروع، یک پروژه با قالب برنامه کاربردی کنسول هسته دات نت بسازید.
گام 2
با استفاده از Nuget Package Manager بسته های مورد نیاز برای Host Builder را نصب کنید.
معرفی Host Builder
Host Builder هاست جدید «عمومی» است که به توسعه دهندگان این امکان را می دهد تا به راحتی نگرانی های متقابلی مانند ورود به سیستم، پیکربندی و تزریق وابستگی را برای برنامه های غیرمتمرکز وب تنظیم کنند. تیم متوجه شد که اتصال میزبان به نگرانی HTTP شاید راه حل ایده آلی نباشد زیرا بسیاری از این موارد در سایر انواع برنامه ها الزامات رایج هستند.
نمونهای از جایی که میتوان از آن استفاده کرد، در یک برنامه کنسولی است که باید وظایف پردازش پسزمینه را اجرا کند، مثلاً ممکن است پیامها را در یک صف مدیریت کند. این نوع خدمات در حال حاضر در معماری مبتنی بر کانتینر مبتنی بر فضای ابری بسیار رایج هستند.
مرحله 3
بسته مورد نیاز کوارتز را با استفاده از Nuget Package Manager نصب کنید.
همچنین، Quartz را با استفاده از Package Manager Console به صورت زیر نصب کنید:
مرحله 4
پس از اتمام نصب بسته، میتوانیم کدی را برای زمانبند بنویسیم که پس از مدت زمان مشخصی اجرا میشود. لطفاً کد زیر را برای نوشتن در فایل program.cs برای نوشتن گزارش در زمان مشخصی بیابید.
static async Task Main(string[] args) {
IHost Host = CreateHostBuilder(args).Build();
await Host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureServices(services => {
ConfigureQuartzService(services);
services.AddScoped < ITaskLogTime, TaskLogTime > ();
});
private static void ConfigureQuartzService(IServiceCollection services) {
// Add the required Quartz.NET services
services.AddQuartz(q => {
// Use a Scoped container to create jobs.
q.UseMicrosoftDependencyInjectionJobFactory();
// Create a "key" for the job
var jobKey = new JobKey("Task1");
// Register the job with the DI container
q.AddJob < Task1 > (opts => opts.WithIdentity(jobKey));
// Create a trigger for the job
q.AddTrigger(opts => opts.ForJob(jobKey) // link to the Task1
.WithIdentity("Task1-trigger") // give the trigger a unique name
.WithCronSchedule("0/5 * * * * ?")); // run every 5 seconds
});
// Add the Quartz.NET hosted service
services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
}
}
Cron Trigger معرفی
همانطور که از کوارتز استفاده می کنیم، می توانیم از یک ماشه کرون استفاده کنیم. Cron چیزی نیست جز این یک ابزار یونیکس است که برای مدت طولانی در دسترس بوده است، بنابراین قابلیت های زمان بندی آن قدرتمند و اثبات شده است. کلاس CronTrigger بر اساس قابلیت های زمان بندی cron است.