[Akka.NET] 액터 생성하기
- C#/Akka(Actor)
- 2022. 1. 11. 20:50
참조
액터 모델이란?
- 최소 단위는 액터입니다.
- 액터는 메시지로만 소통합니다.
- 메시지는 가장 낮은 결합도 입니다.(상대 주소 정보반 갖지, 직접 접근하지 않습니다.)
- 액터 시스템이 메시지 처리를 담당합니다.
- 메시지는 불변입니다.
액터의 기능
- 액터는 Mailbox, Behavior, State, SupervisorStrategy, Children으로 구성됩니다.
- Mainbox : 액터 시스템으로부터 전달 받은 메시지를 FIFO(First In First Out) 으로 처리됩니다.
- Behavior : 함수 수행
- State : 객체 멤버 변수와 비슷한 개념
- SupervisorStrategy : 장애 처리
- Children : 자식, 자신을 중심으로 계층 구조를 접근 할 수 있다.
액터 만들기
- C#에서 Akka.Net NuGet Package를 설치한 후, 코드를 통해 액터 만드는 방법에 대해서 알려 드리겠습니다.
Akka.Net NuGet Package 설치하기
- Akka.Cluster 를 검색하여 해당 누겟 패키지를 설치하면 됩니다.
- Akka.NET 이 Akka.Cluster 종속성에 포함되어 있기 때문에, Akka.Cluster 를 설치하면 추가 설치가 필요 없습니다.
예제 코드
- 앞에서 Akka.Cluster 누겟을 설치 완료 하였습니다.
- 이제 가장 기본이 되는, 액터를 생성하는 방법에 대해서 예제 코드를 통해서 보여 드리겠습니다.
- 또한, 간단히 메시지를 보내서 Receive 로 받아서 Console 에 출력하는 것 까지 보여 드리겠습니다.
using Akka.Actor;
using System;
namespace interfaceTest
{
class Program
{
// 액터 시스템 생성
static ActorSystem system = ActorSystem.Create("MyActor");
static void Main(string[] args)
{
SomeMessage some = new()
{
message = "안녕하세요. SomeMessage 클래스에서 보냅니다."
};
// demoActor 생성
IActorRef demoActor = system.ActorOf(DemoActor.Props(), "someMessage");
IActorRef demoActor2 = system.ActorOf(DemoActor.Props(), "message");
// 액터 메시지 보냄
Console.WriteLine(demoActor.Ask(some).Result);
Console.WriteLine(demoActor2.Ask("이것은 그냥 메시지입니다.").Result);
}
}
public class SomeMessage
{
public string message { set; get; }
}
public class DemoActor : ReceiveActor
{
public DemoActor()
{
Receive<string>(_ => Handle(_));
Receive<SomeMessage>(_ => Handle(_));
}
public static Props Props()
{
return Akka.Actor.Props.Create(() => new DemoActor());
}
private void Handle(string message)
{
Sender.Tell($"Re: {message}");
}
private void Handle(SomeMessage message)
{
Sender.Tell($"SomeMessgae Re: {message.message}");
}
}
}
실행 결과
SomeMessgae Re: 안녕하세요. SomeMessage 클래스에서 보냅니다.
Re: 이것은 그냥 메시지입니다.
728x90
'C# > Akka(Actor)' 카테고리의 다른 글
[Akka.NET] 액터 부모, 자식 메시지 주고 받기 (0) | 2022.01.12 |
---|---|
[Akka.NET] 액터 메시지 보내기 - Tell (1) | 2022.01.12 |
Akka.Cluster 란? (0) | 2022.01.11 |
[C# Akka] Akka 기초 1-6 | 액터 라이프사이클(The Actor Lifecycle) (0) | 2021.06.17 |
[C# Actor] Akka 기초 1-5 | ActorSelection과 함께 주소로 액터 찾기 (0) | 2021.06.16 |
이 글을 공유하기