7

Używam Akka w Play Framework zamiast Job, aby zaplanować uruchamianie kodu co X sekund. Mam coś w rodzaju gromady (działa na Heroku, obecnie na 1 dynie, ale czasami może zdarzyć się kilka równoległych instancji).Jak zaplanować globalne zadanie Akka na przestrzeni wielu procesów?

Czy istnieje prosty sposób, aby "zadanie" było uruchamiane co N sekund na całym świecie w całym klastrze? Wiem, że Quartz obsługuje mechanizmy pamięci/synchronizacji poza procesem, np. DB - czy mogę użyć czegoś podobnego w Scali?

Jest to konfiguracja aktor, który jest uruchamiany na początku gry:

object Global extends GlobalSettings { 

    override def onStart(app: Application) { 
    val monitorActor = Akka.system.actorOf(Props[MonitorLoadJob], name = "monitorLoad") 
    Akka.system.scheduler.schedule(0 seconds, 10 seconds, monitorActor, Tick) 
    } 
} 
+0

może duplikat http://stackoverflow.com/questions/13765466/periodic-jobs-when-running-multiple-servers/13766458 – Schleichardt

+0

@Schleichardt - niezupełnie. Pytam konkretnie o Akka (w kontekście gry, ale nadal pytanie Akka) – ripper234

Odpowiedz

9

Zapoznaj się z ClusterSingletonManager.

Dla niektórych przypadków użycia jest to wygodne, a niekiedy również obowiązkowe upewnić się, że masz dokładnie jeden aktor pewnego rodzaju systemem gdzieś w klastrze.

Kilka przykładów:

  • jeden punkt odpowiedzialności za niektóre klastra całej konsekwentnych decyzji lub koordynacji działań w całym systemie klastra

To wymaga przeprowadzenia Akka Cluster ale to przewidzieć tego typu scenariusz.

0

Jedną z możliwości byłoby mieć aktora uruchomione na każdym węźle, który czeka na komunikat powiadamiania, aby rozpocząć tę pracę i od harmonogram wysyła wiadomość do tych aktorów.

0

Albo można użyć worker dyno dedykowany do pracy, przy użyciu standardowej metody main zaplanować swoją pracę w Akce.

Możesz sprawdzić this link (dla Java, ale dostaniesz pomysł na Scala).

+0

Wolę rozwiązanie, które nie jest specyficzne dla heroku - obecnie testujemy tylko wody z Herkou i wolimy nie zwiększać naszego zamka -w. – ripper234

+0

Ah ok. Musisz więc użyć kilku zdalnych aktorów Akka i znaleźć sposób, aby gdzieś zapisać stan. –

Powiązane problemy