본문 바로가기

Data Engineering/Scala

Akka를 알아보자

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