Versions Compared

Key

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

액터모델의 특징 요약

  • 동시및 분산 시스템작성을 위해 높은수준의 추상화제공
  • 개발자가 명시적 잠금처리및 스레드 관리 안해도됨
  • 이로인해 병렬 시스템 작성에 용이


Actor 정의(+메시지설계)

...


Code Block
languagec#
themeEmacs
titleReceiveActor
linenumberstrue
 
    public class SomeMessage
    {
        public string message { set; get; }
    }

    public class MyActor : ReceiveActor
    {        

        public MyActor()
        {
            Receive<string>(message => {
                Sender.Tell("RE:" + message);                
            });

            Receive<SomeMessage>(message => {
                Sender.Tell("RE:" + message.message);
            });
        }
    }


...

어쨋든, 우리의  아주 짧은 액터 메시지 처리기 설계가 끝이 났습니다.

액터 생성

...


Code Block
languagec#
themeEmacs
linenumberstrue
        protected void SomeTest1()
        {
            IActorRef myActor = actorSystem.ActorOf<MyActor>("myactor");
            Console.WriteLine(myActor.Ask("Hello Akka").Result);
        }

...

Heelo Akka란 메시지를 전송하여 그 결과값을 출력하는 예제입니다.

보낼수 있는 명령 Type

  • Ask : 결과값을 기대할때 사용합니다. 비동기로 수신하며, 동기처리시 .Result를 붙입니다. ( C#의 Async 프로그래밍 )
  • Tell : 결과값이 필요 없을때 , 단지 전송만 하고 대기처리가 없습니다.


Child 액터 생성과 액트선택

...


자식 노드 생성

Code Block
languagec#
themeEmacs
linenumberstrue
            Receive<string>(message => {
                if (message == "createChild")
                {
                    Context.ActorOf<MyActor>("myChild");
                    Sender.Tell("Create Child Succed:myChild");
                }
                else
                {
                    Sender.Tell("RE:" + message);
                }
            });

...

이것을 작동시키는 코드는 아래와 같이 하면 되겠습니다.

특정노드를 선택하여, 자식 노드 동적으로만들고, 자식노드에게 메시지 보내기

Code Block
languagec#
themeEmacs
linenumberstrue
        protected void SomeTest2()
        {
            IActorRef myActor = actorSystem.ActorOf<MyActor>("myactor");
            Console.WriteLine(myActor.Ask("createChild").Result);
            Console.WriteLine(actorSystem.ActorSelection("/user/myactor").Ask("Hello Akka1").Result);
            Console.WriteLine( actorSystem.ActorSelection("/user/myactor/myChild").Ask("Hello Akka2").Result );
        }

...

actorSystem.ActorSelection( 액터주소).어떠한액션()  이러한 접근방식으로 메시지 전송이 가능합니다.


주소체계

...


잠시 실습없이, Actor를 접근하는 주소체계에대해 설명 드리겠습니다.  ActorPath는 총 4가지로 구분이 되며 

...