2011-07-19 13 views
5

Czy istnieje elegancki sposób planowania zadań za pomocą NServiceBus. Jest jeden sposób, który znalazłem podczas searching the net. Czy NServiceBus udostępnia wewnętrzne interfejsy API do planowania.Jak zaplanować uruchamianie zadania codziennie przy użyciu NServiceBus

+0

Używamy tej metody i działa dobrze. Jakie przetwarzanie robisz? Zamiast tego możesz potrzebować sagi. –

+0

Próbuję użyć tej samej metody. Jednak nie jestem w stanie wymyślić, jak uzyskać odniesienie do magistrali w realizacji harmonogramu. – frictionlesspulley

+1

Zabawny Miałem ten sam problem. W końcu zapytałem kontener o wystąpienie magistrali jawnie: IBus bus = Configure.Instance.Builder.Build () ;. Jeśli to odpowie na to pytanie, zmienię i opublikuję jako odpowiedź. –

Odpowiedz

8

NServiceBus teraz ma to wbudowane w

Stąd http://docs.particular.net/nservicebus/scheduling-with-nservicebus

public class ScheduleStartUpTasks : IWantToRunWhenTheBusStarts 
{ 
    public void Run() 
    { 
     Schedule.Every(TimeSpan.FromMinutes(5)).Action(() => 
      Console.WriteLine("Another 5 minutes have elapsed.")); 

     Schedule.Every(TimeSpan.FromMinutes(3)).Action(
          "MyTaskName",() => 
          { 
           Console.WriteLine("This will be logged under MyTaskName’."); 
          }); 
    } 
} 

Uwaga zastrzeżeniem

Kiedy go nie używać. Możesz spojrzeć na zaplanowane zadanie jako prostą, nigdy nie kończącą się sagę . Ale gdy tylko twoje zadanie zacznie dostawać pewną logikę (instrukcje if/switch), powinieneś rozważyć przejście do sagi.

+0

Wow! Dzięki za ten wpis – frictionlesspulley

+0

To działało dla mnie ... przez jakiś czas. Pewnego dnia nie udało się produkcji, harmonogram został wyłączony na 2 dni, mimo że reszta autobusu nadal działała. Nie zarejestrowano żadnych komunikatów o błędach NSB. Więc teraz szukam w zamian Quartz.NET. Podobno jest to znany problem ... http://stackoverflow.com/q/23732174/61697 – demoncodemonkey

+0

@demoncodemonkey znany problem, który został naprawiony https://github.com/Particular/NServiceBus/issues/2133. ale kwarc.NET jest całkowicie poprawną alternatywą. – Simon

3

Uwaga: Ta odpowiedź była ważna dla wersji NServiceBus w wersji 2.0, ale nie jest już poprawna. Wersja 3 ma tę funkcjonalność. Idź przeczytaj odpowiedź Simona, jest ważna dla wersji 3!

NServiceBus nie ma wbudowanego systemu planowania. Jest to (na bardzo prostym poziomie) procesor wiadomości.

Możesz utworzyć klasę, która implementuje IWantToRunAtStartup (metody Run i Stop), a następnie stwórz timer lub wykonaj dowolną logikę, którą musisz zrobić, aby w określonym czasie przesyłać wiadomości do magistrali.

Inni użytkownicy użyli Quartz.NET razem z NServiceBus, aby uzyskać bardziej szczegółową funkcję planowania.

+0

Użyłem Quartz do planowania innych usług, dopóki nie zaczęliśmy używać NServiceBus do przesyłania wiadomości. Po raz pierwszy dostałem potrzebę zaplanowania rzeczy po tym, jak nasz harmonogram kwarcowy przestał działać. – frictionlesspulley

+2

Użyłem Quartz, aby uruchomić zadanie co godzinę, a zadanie właśnie opublikowało wydarzenie ... Usługa wykorzystała metody Run & Stop w IWantToRunAtStartup. Oto dobry początek http://stuartcullinan.blogspot.com/2010/12 /building-nservicebus-timeout-manager.html, btw, sprawdź [NServiceBusContrib] (https://github.com/nservicebus/nservicebus-contrib) – Sarmaad

+0

Uwaga ta odpowiedź nie jest już poprawna – Simon

Powiązane problemy