Page History
Info |
---|
Actor메시지는 일반적으로 보낸순서에의한 순서가 보장이 되지만 MailBox의 경우 동시에 보낸 메시지중 우선으로 처리해야할 메시지에대해 정의가 가능합니다. 덜바쁜 녀석에게 작업을 분배한다던지, 메시지 자체에 우선순위를 높일수 있습니다. |
우선순위 정의 코드
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
using Akka.Actor; using Akka.Event; using Akka.Dispatch; //namespace ServiceA.STUDY public class Issue { public bool IsSecurityFlaw; public bool IsBug; public string Message; public Issue(string message, bool isBug) { Message = message; IsBug = isBug; IsSecurityFlaw = !isBug; } } public class IssueTrackerMailbox : UnboundedPriorityMailbox { public IssueTrackerMailbox(Settings setting , Akka.Configuration.Config config) : base(setting, config) { } 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; } } |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
var target = actorSystem.ActorOf<MailBoxActor>("inboxactor"); var inbox = Inbox.Create(actorSystem); try { ///// Sample 1 : 특정 메시지를 받는지 여부 inbox.Send(target, "hello"); bool result = inbox.Receive(TimeSpan.FromSeconds(1)).Equals("world"); Console.WriteLine("result:" + result); //// Sample 2 : 관리대상 target이 종료되는지 여부... inbox.Watch(target); //해당 액터를 inbox에서 감시 target.Tell(PoisonPill.Instance, ActorRefs.NoSender); if( inbox.Receive(TimeSpan.FromSeconds(1)) is Terminated) { Console.WriteLine("target 종료됨.."); } } catch (TimeoutException) { Console.WriteLine("TimeOut"); } |
이경우 Inbox 를 사용하여, 외부에서 복수의 복수의 Actor의 요청결과를 묶어낼수 있습니다.