프로그래밍/Akka.Net

[Akka.Net] Actor 생성

Victory_HA 2022. 6. 6. 17:45

참조
https://getakka.net/articles/actors/receive-actor-api.html


  • Akka.NET에서 액터를 생성하면 항상 특정 부모에 속합니다.
  • 이것은 액터가 항상 트리로 구성된다는 것을 의미합니다.
  • 일반적으로 액터 생성은 다른 액터 내부에서만 발생할 수 있습니다.
  • 이 '생성자' 액터는 새로 생성된 자식 액터의 부모가 됩니다.
  • 그러면 처음으로 만든 액터의 부모가 누구냐고 물을 수 있습니다.
  • 최상위 액터를 생성하려면 먼저 액터 시스템을 초기화해야 합니다.
  • 이것을 객체 시스템이라고 합시다.
  • 그 다음에는 새로 생성된 액터에 대한 참조를 반환하는 System.ActorOf() 호출이 이어집니다.

Message 클래스 생성

  • 액터에게 무언가를 하라고 지시하는 방법은 메시지를 보내는 것입니다.
  • GreetMessage은 보낼 메시지 유형입니다.

GreetMessage.cs

namespace Sample_TEST
{
    public class GreetMessage
    {
        public string who { get; set; }
        public GreetMessage(string who)
        {
            this.who = who;
        }
    }
}

Actor 생성

  • 액터 내부에서 Receive() 메서드를 사용하려면 액터가 ReceiveActor에서 상속받아야 합니다.
  • 생성자 내에서 처리하려는 모든 유형의 메시지에 대해 Receive(Action 처리기)에 대한 호출을 추가합니다.
  • PreStart는 액터가 시작될 때 Akka 프레임워크에 의해 호출됩니다.
  • PostStop은 액터가 중지된 후에 호출됩니다.
using Akka.Actor;
using System;

namespace Sample_TEST
{
    public class GreetingActor : ReceiveActor
    {
        public GreetingActor()
        {
            Receive<GreetMessage>(x => Console.WriteLine($"{x.who}", ConsoleColor.Green));
        }

        // Actor 시작 시 실행
        protected override void PreStart() => Console.WriteLine("Pre Start.", ConsoleColor.Green);

        // Actor 중지 시 실행
        protected override void PostStop() => Console.WriteLine("Post stop.", ConsoleColor.Red);
    }
}

Main

using System.Threading;
using Akka.Actor;

namespace Sample_TEST
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create ActorSystem
            var system = ActorSystem.Create("ActorSys");

            // Create Actor 
            var greetActor = system.ActorOf<GreetingActor>("greetingActor");

            // Send Message to Actor
            greetActor.Tell(new GreetMessage("World"));

            Thread.Sleep(1000);

            // Stop Actor
            system.Stop(greetActor);

            Console.ReadKey();
        }
    }
}

'프로그래밍 > Akka.Net' 카테고리의 다른 글

[Akka.NET] Stash  (0) 2023.05.30
[Akka.NET] Receive()와 ReceiveAny()  (0) 2023.05.30
[Akka.NET] Akka.NET Blog Archieve  (0) 2023.05.30
[Akka.Net] MailBox  (0) 2022.06.09
[Akka.Net] Props 이용한 Actor 생성  (0) 2022.06.06