.Net scheduler (.net Core)

0

Piszę aplikację w .net core, aplikacja co jakiś czas dostaje dane na stworzony endpoint(dane w formacie JSON) dane przychodzą mniej więcej grupami tzn 20-30 requestów x czasu przerwy i tak dalej przerwa może trwać od minuty do kilku dni (mogę rozpoznawać grupy tzn. requesty z danej grupy posiadają id grupy). Na zakończenie wysyłania danych czyli np tej puli 30 requestów moja aplikacja musi coś zrobić - i właśnie tutaj zaczyna się problem. Aplikacja nie wie czy dany request jest ostatnim, rozwiązałem to w ten sposób, że używałem hangfire(scheduler) i każdy request ustawiał zadanie które miało się wykonać za 5 min, jeśli nadchodził kolejny request z danej grupy usuwał zadanie i tworzył swoje. Gdy requesty przestają przychodzić po 5 min odpala się zadanie które muszę wykonać. Problem w tym, że w .net Core hangfire nie ma wsparcia dla MySql a niestety muszę użyć tej bazy. Nie znalałem żadnego innego schedulera więc postanowiłem zrobić to w inny sposób tzn. wątki pod koniec czekają 5 min i sprawdzają flagę czy jest ostatni jeśli tak to wykonaj zadanie. Wydaje mi się, że ten sposób nie jest odpowiedni, optymalny. Proszę o radę jak to rozwiązać?

0

Używałem go w zwykłych asp.net aplikacjach ale niestety nie potrafię go dobrze skonfigurować na .net core.

0

Szukałbym bardziej rozwiązania jak to skonfigurować niż pisać takie mechanizmy samemu.

0

W takim razie może jest tu ktoś kto używał Quartz w asp.net Core?

0

z czym masz dokładnie problem? Ja nie używałem tego w .Net Core ale pierwszy link na stacku coś tam podpowiada
http://stackoverflow.com/questions/40068690/how-to-use-quartz-net-with-asp-net-core-web-application

0
public void ConfigureServices(IServiceCollection services)
{
  services.AddQuartz(new QuartezOptions {});
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
  app.UseQuartz();
}

Ten kod nie zadziała, nie ma czegoś takiego jak: services.AddQuartz oraz app.UseQuartz. I własnie o to chodzi nie wiem jak to dodać.

0

Własne serwisy możesz zarejestrować tak:

 services.AddSingleton<IScheduler>(schedulerFactory.GetScheduler());
1

Jeśli Cie to jeszcze interesuję to skonfigurowałem tą bibliotekę. Musisz zainstalować 2 nugety. Są jeszcze niestety w wersji alpha.
1. Install-Package Quartz -Pre
2. Install-Package Quartz.Serialization.Json -Pre

Extensions methods

 public static class QuartzExtensions
    {
        public static void UseQuartz(this IApplicationBuilder app)
        {
            app.ApplicationServices.GetService<IScheduler>();
        }

        public static async void AddQuartz(this IServiceCollection services)
        {
            var props = new NameValueCollection
            {
                {"quartz.serializer.type", "json"}
            };
            var factory = new StdSchedulerFactory(props);
            var scheduler = await factory.GetScheduler();
            services.AddSingleton(scheduler);
        }
    }
 

Użycie w Startup.cs

public void ConfigureServices(IServiceCollection services)
{   
    services.AddQuartz();
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseQuartz();

I wstrzyknięcie w controlerze

public class HomeController : Controller
{
        private readonly IScheduler scheduler;

        public HomeController(IScheduler scheduler)
        {
            this.scheduler = scheduler;
        }```

1 użytkowników online, w tym zalogowanych: 0, gości: 1