Worker servisleri, .NET Core 3 tarafından sunulan yeni bir şablon. Şimdi, .NET Core 3 Worker hizmetini ve Coravel'i birleştirerek bir zamanlayıcı job'ını nasıl uygulanacağını görelim .

Worker Servisi nedir? Worker Servisi, e-posta gönderme, sms gönderme, olay yayını, belirli bir zamanda bazı verileri tetikleme, maaş hesaplaması vb. gibi fonksiyonları arkaplanda gerçekleşterebilir.

Bir örnekle anlayalım:

Önkoşul .NET Core 3 SDK'yı resmi Microsoft sitesinden indirin.

Yeni bir klasör oluşturma Bu klasörde aşağıdaki komutu çalıştırın. Bu worker servisinin bir şablonu kullanarak örnek bir konsol uygulaması oluşturur.

dotnet new worker  

images/netcore-worker.png

Projeyi Visual Studio'da açalım. Progam.cs dosyası aşağıdaki gibi görünecek.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Threading.Tasks;  
using Microsoft.Extensions.DependencyInjection;  
using Microsoft.Extensions.Hosting;  
  
namespace CoreWorkerServiceSchedularJob  
{  
    public class Program  
    {  
        public static void Main(string[] args)  
        {  
            CreateHostBuilder(args).Build().Run();  
        }  
  
        public static IHostBuilder CreateHostBuilder(string[] args) =>  
            Host.CreateDefaultBuilder(args)  
                .ConfigureServices((hostContext, services) =>  
                {  
                    services.AddHostedService<Worker>();  
                });  
    }  
}  

Coravel'i yapılandırılması

NuGet Package konsolunda aşağıdaki komutu çalıştırın.

dotnet add package coravel  

Invocable uygulama

"Job çalıştırıldı....... !!!" gibi bir metni yazdığımız sınıfımıza (CoreWorkerServiceSchedularJob.cs) ekleyelim.

using Coravel.Invocable;  
using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace CoreWorkerServiceSchedularJob  
{  
    class MyFirstJob  : IInvocable  
    {  
        public Task Invoke()  
        {  
            Console.WriteLine("Job çalıştırıldı.......!!!" + DateTime.Now.ToString());  
            return Task.CompletedTask;  
        }  
    }  
}  

Job'ı kaydetme ve zamanı belirtme

Şimdi işimizi .NET Core'un service container'ına kaydedelim ve beş saniye için zamanı belirleyelim. İsterseniz başka bir sıklık belirtebilir yada spesifik bir zaman belirleyebilirsiniz. Program.cs dosyasının son kodu aşağıdaki gibidir.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Threading.Tasks;  
using Coravel;  
using Microsoft.Extensions.DependencyInjection;  
using Microsoft.Extensions.Hosting;  
  
namespace CoreWorkerServiceSchedularJob  
{  
    public class Program  
    {  
        public static void Main(string[] args)  
        {  
            IHost host = CreateHostBuilder(args).Build();  
            host.Services.UseScheduler(scheduler => {  
                
                // Remind schedular to repeat the same job in every five-second   
                scheduler  
                    .Schedule<MyFirstJob>()  
                    .EveryFiveSeconds();  
  
  
            });  
            host.Run();  
        }  
  
        public static IHostBuilder CreateHostBuilder(string[] args) =>  
            Host.CreateDefaultBuilder(args)  
                .ConfigureServices(services =>  
                {  
                    services.AddScheduler();  
  
                    // register job with container  
                    services.AddTransient<MyFirstJob>();  
                });  
    };  
}  

Uygulamayı çalıştırma zamanı

Uygulamanın çıktısına bakalım.

images/coravel.png

.NET Core 3 ve Worker hizmeti şablonu ve Coravel paketinin bir kombinasyonuyla sadece 5 dakikalık sürede bir zamanlayıcı görevi oluşturmuş olduk.

Kolay gelsin!