Luzne notatki z warsztatow 'Introduction to Akka with Scala' na Warsjawa 2014
Szybkie napisanie POJO.
case class Thing(name: String)
W tym wypadku klasa z konstruktorem String + pole name + settery & gettery + equals & hashCode.
Case classe mozna tworzyc bez uzycia slowa new.
Sposob na zrobienie singletonu. Odwolujemy sie do niego po nazwie klasy. Wszystkie metody w objectie sa odpowiednikiem metod statycznych w javie.
object PatternMatchingTests {}
Bardziej zaawansowany switch z Javy. W case zamiast _ mozemy uzyc dowolnej nazwy.
Framework implementujacy system aktorow.
- Aktorzy wymieniaja miedzy soba wiadomosci.
- Sa obiektami zywymi
- Nie porozumiewamy sie miedzy nimi przez wywolywanie metod, ale przez wymiane wiadomosci
- Kazda wiadomosc jest zakolejkowana w mailboxie i aktor je przetwarza
- Dostarczenie wiadomosci nie jest gwarantowane
- Zawiera api Scalowe i Javowe
- Mikroserwisy w jednej aplikacji
- Jeden aktor to pojedyncza komorka, ktora zajmuje sie pojedynczym zadaniem i procesuje polecenia zwiazane z tym zadaniem
- Aktor reaguje na dostarczone wiadomosc
- Aktor ma:
- Nazwe
- Mutowalny stan
- Cykl zywcia
- Mailbox - wiadomosci najczesciej sa przetwarzane kolejno
- Rodzica
- Dzieci (optionally)
- Zmienialne zachowanie
- Internally synchronous! - pomiedzy dwoma aktorami nie ma synchronicznosci, ale wew jednego aktora wszystko na jednym watku
- Aktor jest wskazywany przez AktorRef
- Struktura drzewiasta
- Rodzic musi zarzadzac tym gdy jakiemus dziecku powstanie blad
- Wazne by zbudowac hierarchie tak by w razie bledu reszta systemu mogla funkcjonowac dalej
- Moga zyc w jednej JVM
- Moga byc rozproszone - mozemy napisac kod tak by bylo to przezroczyste
Myslimy o aktorach jako niezaleznych jednostkach przetwarzajacych dane. Kazdy aktor powinien oblugiwac jedna funkcje.
- Akka zarzadza watkami za nas
- It's fast, non blocking
- It gives a horizontally scalable application architecture
- Biblioteka do obslugi serwera HTTP
- szybka, lekka, layered HTTP library (+server)
- Layers: TCP -> HTTP server -> Routing
- Built on actors
- Will merge with Akka
- Composable, declarative DSL for routes
Supervised by actor's parent
- Execution
- Stop the child?
- restart the child?
- restart all children?
- esclate (throw to parent)?
Jesli restartujemy aktora, to wszystkie dziecie tez sa zatrzymywane. PoisonPill - wyslanie sygnalu do restartu. Jesli wczesniejsze wiadomosci sie wykonaja, nastepuje wywolanie PoisonPill.
Pasywne wielodziedziczenie. Kazdy trait moze zawierac metody z i bez implementacja