Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

가장 기본적인 Actor의 설계방법을 살펴보겠습니다.

Actor에대한 이론적인 설명은 앞장에서 했기때문에 생략하겠습니다.

Actor에 대한 사용패턴/컨셉은 언어/플래폼이 틀려도 큰 차이가 없습니다.

액터메시지의 특징

Image Added

액터는 각각 고유의 메시지 큐를 가지고 있고, 하나의 액터는 메지큐에 순차적으로

끄집어 처리하기때문에 일반적인 상황에서 순서보장이 됩니다. 

더 자세한 참고자료: Actor


주요 액터 모듈

import akka.actor.ActorSystem

No Format
ActorSystem system = ActorSystem.create("helloakka");

 어플리케이션 어플리케이션 하나당, 일반적으로 액터 시스템도 하나이며

액터생성과 제어에 관련한 여러가지 함수를 제공합니다.

...

액터를 설계할때 기본적으로 상속받는 준비된 추상 액터 입니다.

위코드는 AbstaractActor를 상속받아 패턴 매칭화 해서 메시지를 처리하는 고급방법입니다.

 UntypedActor 를 상속받아 우리에게 익숙한 If/Switch문을 사용할수도 있습니다.


import akka.actor.UntypedActor

Code Block
languagejava
themeEmacs
public class TestActor extends UntypedActor {
    private final LoggingAdapter log = Logging
            .getLogger(getContext().system(), "TestActor");

    @Override
    public void onReceive(Object message) throws Exception {    	    	
    	if(message instanceof String) {	//String뿐만 아니라 모든 Java객체 통신가능
    		log.info("Incommessage {}", message);
    		sender().tell("너의 메시지에 응답을함", ActorRef.noSender());    		
    	}else {
    		log.info("Unhandle Message {}", message);    		
    	}
    	
    }
}

객체조건에 따른 분기처리를 위한 패턴매칭은 어디서 누가? 먼저 도입한지는 모르겠으나 , Java/C# 등에서도  최근버젼에서 도입되고 사용가능한 방식이며

Scala에서는 이미 초기부터 사용가능한방식입니다. 일반적으로 오픈진영을 통합해야하는 Java 진영에서 최신 모던 언어스펙적용이

느린편이나 8이후로 가속이 붙은 느낌이 듭니다. 어쨋건 위 코드는 패턴매칭이 아닌 우리에게 익숙한 케이스바이 케이스로 처리한 방식입니다.


import akka.actor.Props

...

Code Block
languagejava
themeEmacs
Props props1 = Props.create(MyActor.class);
Props props2 = Props.create(ActorWithArgs.class,
  () -> new ActorWithArgs("arg")); // careful, see below
Props props3 = Props.create(ActorWithArgs.class, "arg");

...