Page History
Info |
---|
액터모델의 특징 요약
ActorSystem 주요 메서드
Actor 메시지 전송 주요 메서드
|
Actor 정의(+메시지설계)
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
Receive<string>(message => { if (message == "createChild") { Context.ActorOf<MyActor>("myChild"); Sender.Tell("Create Child Succed:myChild"); } else { Sender.Tell("RE:" + message); } }); |
...
이것을 작동시키는 코드는 아래와 같이 하면 되겠습니다.
특정노드를 선택하여, 자식 노드 동적으로만들고, 자식노드에게 메시지 보내기
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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( 액터주소).어떠한액션() 이러한 접근방식으로 메시지 전송이 가능합니다.
액터 생성 Factory화
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
public class DemoActor : ReceiveActor { private readonly int _magicNumber; public DemoActor(int magicNumber) { _magicNumber = magicNumber; Receive<int>(x => { Sender.Tell(x + _magicNumber); }); } public static Props Props(int magicNumber) { return Akka.Actor.Props.Create(() => new DemoActor(magicNumber)); } } system.ActorOf(DemoActor.Props(42), "demo"); |
...