2016-05-31 19 views
6

Pracuję nad aplikacją ASP.NET Core RC2. Istnieje potrzeba, aby ta aplikacja okresowo wywoływała określone zadania, takie jak wysyłanie wiadomości e-mail lub wywoływanie określonej logiki biznesowej.Okresowe wykonywanie zadań tła w aplikacji ASP.NET Core RC2

Mam świadomość, że istnieją niezależne biblioteki, takie jak Hangfire lub Quartz.NET, które zapewniają tę funkcjonalność planowania zaraz po zainstalowaniu. Jednak nie sądzę, żadne z tych obecnie obsługuje ASP.NET Core RC2. Czy są dostępne inne opcje zgodne z ASP.NET Core RC2?

Jeśli nie, to myślę, że możliwą opcją jest użycie jednej z tych niezależnych bibliotek z oddzielnej usługi Windows, która może następnie kierować na obsługiwaną wersję .NET. Ta usługa może następnie okresowo wysyłać żądania do aplikacji ASP.NET za pośrednictwem jej interfejsu Web API w celu wywoływania zadań.

Jednak wolałbym nie mieć oddzielnej usługi, ponieważ zwiększa liczbę ruchomych części i komplikuje wdrożenie naszej aplikacji.

+1

Gdzie uruchamiasz aplikację? Lazur? Jeśli korzystasz z usługi aplikacji Azure, możesz użyć ról pracowników, aby wdrożyć aplikacje działające w tle pod numerem – Tseng

+0

@Tseng dzięki za odpowiedź. Tak, zostanie wdrożony na platformie Azure. Czy sugerujesz role pracowników jako alternatywę dla używania Hangfire/Quartz.NET, czy sugerujesz, że Hangfire lub Quartz.NET byłyby używane w roli robotów? Czy WebJob jest wykonalną alternatywą dla roli pracownika? – aw1975

Odpowiedz

1

Używamy prostej aplikacji "task runner", która pobiera parametry wiersza polecenia, aby ustalić, która usługa WWW/Windows ma zostać wywołana. Następnie użyj Harmonogramu zadań systemu Windows, aby wywołać aplikację "task runner". Więc nie ma znaczenia, co jest usługą lub technologią, co było napisane w.

3
  • Jeśli kierujesz pełną .NET CLR wtedy żadnej biblioteki, który pracował wcześniej będzie działać teraz. To się nie zmieniło w RC2. Azure WebJobs to kolejne rozwiązanie, oprócz tych, o których już wspomniałeś.

  • Dla CoreCLR nie znam żadnej struktury, która jest już kompatybilna. Być może trzeba będzie wymyślić własne rozwiązanie lub złamać aplikację na dwie części, albo wprowadzając cały zaplanowany kod w całości .NET, albo tworząc małą aplikację w pełnym .NET, która wywoła CoreCLR.

1

Zawsze można dać Quartz v3 zbudować. Działa już na CoreCLR, a testy prawie się kończą. Musisz sam zbudować ze źródeł, używając Visual Studio. See the v3 branch.

Największym zastrzeżeniem w tej chwili jest niekompatybilna serializacja, ponieważ v2 może serializować binarnie tylko do bazy danych (mapy danych zadań itp.), A v3 obsługuje tylko format JSON jako format serializacji. Historia może się zmienić, ponieważ w końcu planują przywrócić BinaryFormatter.

Powiedziałbym, że jeśli jesteś zadowolony z używania tylko RAMJobStore bez utrzymywania bazy danych, powinieneś być złoty. Prawdopodobnie będzie działać lepiej niż ręcznie wykonane rozwiązanie.

+0

Dziękuję - na pewno spróbuję. Używaliśmy Quartz w mojej poprzedniej pracy i działało naprawdę dobrze dla nas. – aw1975

5

Podręcznik podejście:

  • Tworzenie Service zawierający długo uruchomiony kod, najlepiej async
  • Dodaj while pętlę do serwisu z zatrzymując (także korzystnie async)
  • połączenia długie bieganie metoda klasy usług w nowym wątku z Task.Run(() => ... lub w puli wątków (lub w starszych wersjach Thread).
  • Utwórz wystąpienie klasy w Startup.cs
  • Użyj services.AddSingleton(MyServiceInstance); w Configure(... w Uruchomienie.cs