Akka Actor 는 message passing을 통해 커뮤니케이션하는 entity다.
- 당연하지만, 액터모델에서 message는 first-class citizen 이다.
- Event-driven model: asynchronous 하게 메세지를 전달하기 때문에 스레드를 블락하지 않아도 된다.
- Akka Actor 는 state와 behavior을 가진다.
Akka Props을 사용해서 configuration을 명시한다. ActorSystem.actorOf (or ActorContext) 메소드에 Props[원하는_액터_클래스]를 전달해서 액터를 생성한다.
Akka Actor에 Asynchronously 하게 메세지를 전달하는 방법으로는 tell과 ask가 있다.
Tell Patern
actor ! "hello" // actor 에게 "hello" 라는 메세지를 보내는 것. == actor.tell("hello")
Ask Patern
val f = actor ? "Did you get my message?" // Future을 리턴한다.
val result = Await.result(f) // sender() ! "Yes I got your message!"
println(result) // "Yes I got your message!"
Message는 여러 스레드간 공유되기 때문에 immutable 해야한다.
ActorSystem은 Akka로의 initial entrypoint 이며, 일반적으로 앱 마다 하나씩 존재한다.
Guardian Actor이라는 가장 상위의 액터는 앱을 bootstrap 하는 역할을 한다.
Location Transparency: spawn 메소드로 액터를 생성하는데, 액터의 인스턴스가 아닌 액터를 가리키는 reference가 리턴된다(ActorRef). 이는 분산 시스템에서 강점을 보인다.
'Data Engineering > Scala' 카테고리의 다른 글
vim-scala plugin (0) | 2020.02.11 |
---|---|
가변 파라미터(variable arguments)를 받는 메소드 (0) | 2020.02.10 |