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ć?
- Rejestracja:ponad 13 lat
- Ostatnio:10 miesięcy
- Postów:395
0
Może Quartz.NET?
https://github.com/quartznet/quartznet
- Rejestracja:ponad 13 lat
- Ostatnio:10 miesięcy
- Postów:395
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
edytowany 2x, ostatnio: error91
- Rejestracja:ponad 10 lat
- Ostatnio:ponad 6 lat
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ć.
- Rejestracja:ponad 13 lat
- Ostatnio:10 miesięcy
- Postów:395
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;
}```
edytowany 5x, ostatnio: error91