프로그래밍/Akka.Net

[Akka.Net] MailBox

Victory_HA 2022. 6. 9. 17:10

참고 : https://getakka.net/articles/actors/mailboxes.html

Mailbox

  • Akka.NET에서 Mailbox는 액터를 대상으로 하는 메시지를 보관합니다.
  • 액터에게 메시지를 보낼 때 메시지는 액터에게 직접 전달되지 않고, 해당 액터의 Mailbox로 우선 이동 후 액터가 처리할 시간이 있을 때 메시지를 처리합니다.
  • Mailbox는 메시지 큐로 설명이 가능합니다.
  • Mailbox에 들어온 메시지는 보통 액터에서 순서대로 처리합니다.

Priority Mailbox

  • 하지만 처리 순서를 변경할 수 있는 Priority Mailbox가 있습니다.
  • 일반적으로 모든 액터는 Mailbox가 있지만, 필수 사항은 아닙니다.
  • 라우터(Router)에 속한 라우티(Routees)들은 하나의 Mailbox를 공유합니다.

Mailbox 사용하기

  • 액터가 특정 사서함을 사용하도록 하려면 다음 위치 중 하나를 설정하면 됩니다.
  1. Actor props에서 설정

    Props.Create<ActorType>().WithMailbox("my-custom-mailbox");
  2. Actor 구성에서 설정

  • 대개 Hocon에서 설정
    akka.actor.deployment {
     /my-actor-path {
         mailbox = my-custom-mailbox
     }
    }  

UnboundedMailbox

  • Akka.NET에서 사용하는 기본 사서함입니다.

UnboundedPriorityMailbox

  • 액터는 Mailbox에 들어가는 메시지의 우선순위를 설정할 수 있습니다.
  • PriorityGenerator 메서드에서 반환된 값은 사서함의 메시지 순서를 지정하는 데 사용됩니다.
  • 메시지에 포함된 Priority가 낮은 값이 먼저 처리됩니다.
    • 동일한 순위의 메시지는 정의하지 않습니다.
public class IssueTrackerMailbox : UnboundedPriorityMailbox
{
  protected override int PriorityGenerator(object message)
  {
      var issue = message as Issue;

      if (issue != null)
      {
          if (issue.IsSecurityFlaw)
              return 0;

          if (issue.IsBug)
              return 1;
      }
      return 2;
  }
}

'프로그래밍 > 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] Props 이용한 Actor 생성  (0) 2022.06.06
[Akka.Net] Actor 생성  (0) 2022.06.06