Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paweloczadly/5cec6e3f9f8d9a57265f to your computer and use it in GitHub Desktop.
Save paweloczadly/5cec6e3f9f8d9a57265f to your computer and use it in GitHub Desktop.
Introduction to Akka with Scala - Warsjawa 2014

About

Luzne notatki z warsztatow 'Introduction to Akka with Scala' na Warsjawa 2014

Case class

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.

Object

Sposob na zrobienie singletonu. Odwolujemy sie do niego po nazwie klasy. Wszystkie metody w objectie sa odpowiednikiem metod statycznych w javie.

object PatternMatchingTests {}

Pattern matching

Bardziej zaawansowany switch z Javy. W case zamiast _ mozemy uzyc dowolnej nazwy.

Akka

Framework implementujacy system aktorow.

Aktorzy

  • 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

Hierarchia aktorow

  • 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

Actor's location

  • Moga zyc w jednej JVM
  • Moga byc rozproszone - mozemy napisac kod tak by bylo to przezroczyste

Po co to wszystko?

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

Spray == Akka HTTP

  • 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

Actor lifecycle

Supervised by actor's parent

  1. Execution
  2. Stop the child?
  3. restart the child?
  4. restart all children?
  5. 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.

Trait

Pasywne wielodziedziczenie. Kazdy trait moze zawierac metody z i bez implementacja

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment