일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 하이브리드앱
- 그라파나
- 안드로이드 웹뷰
- 파이썬
- Golang
- Adapter 패턴
- 주키퍼
- Hyperledger fabric gossip protocol
- 스칼라 강좌
- 이더리움
- hyperledger fabric
- play 강좌
- Play2
- 파이썬 데이터분석
- 스칼라 동시성
- 엔터프라이즈 블록체인
- akka 강좌
- 파이썬 강좌
- Actor
- CORDA
- 블록체인
- 파이썬 동시성
- 파이썬 머신러닝
- 플레이프레임워크
- Play2 로 웹 개발
- 스칼라
- Akka
- 스위프트
- 하이퍼레저 패브릭
- play2 강좌
- Today
- Total
HAMA 블로그
예제로 보는 아카(akka) - 2. 생성 (Hello Akka) 및 메세지 수신 본문
- Scala 2.11 기반
- Akka 2.4.11 기반
- Learning Concurrent Programming in Scala 참고
생성 (Hello Akka)
import akka.actor.{ ActorRef, ActorSystem, Props, Actor }
import akka.event.Logging
// 나의 액터 클래스
class Hello(val hello: String) extends Actor {
val log = Logging(context.system, this)
def receive = {
case `hello` => // 받은 메세지가 'hello' 라면
log.info(s"Received a $hello!")
case msg => // 받은 메세지가 아무것이라면
log.info(s"Unexpected message '$msg'")
context.stop(self)
}
}
object ActorsCreate extends App {
// 액터 시스템 생성 . 이름은 mysystem
val mySystem = ActorSystem("mysystem")
// 액터 시스템을 통하여 나의 Actor 생성. 이름은 greeter 타입은 ActorRef
val hiActor : ActorRef = mySystem.actorOf(Props(new Hello("hi")), name = "greeter")
// 나의 액터와 교신. 'hi' 라는 메세지를 보낸다. // Received a hi! 출력
hiActor ! "hi"
Thread.sleep(1000)
// 나의 액터와 교신. 3 이라는 메세지를 보낸다. // Unexpected message '3' 출력
hiActor ! 3
Thread.sleep(1000)
// 액터 시스템 종료
mySystem.terminate()
}
주석을 통하여 충분히 이해 가리라 본다.
액터시스템을 먼저 생성하고 그 액터 시스템에 우리가 만든 액터클래스를 객체화하여 등록시켜 사용하는것이다.액터 클래스에는 receive라는 메소드가 있는데 , 액터는 receive 를 통하여 메일박스로 부터 받은 메세지를 처리한다. receive 메소드는 PartialFunction[Any,Unit] 타입의 객체이다. Any 타입의 메세지를 받아서 처리한다.
Props 객체는 액터 인스턴스를 만드는데 필요한 모든 정보를 캡슐화해 놓았다. (직렬화 가능하며, 네트워크를 통해 전송 가능)
메세지 수신
메세지 수신은 receive 메소드를 통해서 합니다.
def receive = {
case `hello` => // 받은 메세지가 'hello' 라면
log.info(s"Received a $hello!")
case msg => // 받은 메세지가 아무것이라면
log.info(s"Unexpected message '$msg'")
context.stop(self)
}
이렇게 'hello'문자열이 날라오는등 경우(case) 에 따라서 케이스 매칭 해줍니다.
아래는 케이스 클래스를 매칭 합니다. 좀 더 복잡한 receive 처리를 할 수 있겠지요.
case class ClassOne(x: Int, y: String) case class ClassTwo(a: Int, b: Option[ClassOne]) override def receive = { case ClassOne(x, y) => println(s"Received $x and $y") case ClassTwo(a, Some(ClassOne(x, y)) if a == 42 => // do something case ClassTwo(a, None) => case c @ ClassOne(_, "foo") => // only match if y == "foo", now c is your instance of ClassOne }
'Akka' 카테고리의 다른 글
예제로 보는 아카(akka) - 5. 액터 사이의 통신및 액터 멈추기 (0) | 2016.10.05 |
---|---|
예제로 보는 아카(akka) - 4. 액터 생명 주기 (0) | 2016.10.05 |
예제로 보는 아카(akka) - 3. 부모,자식 액터 (0) | 2016.10.05 |
예제로 보는 아카(akka) - 1. 세팅 (0) | 2016.10.04 |
예제로 배우는 아카(akka) - Akka 시작하기 (0) | 2016.10.02 |