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;
}
} |
PriorityGenerator 에서 우선순위를 조정합니다.
Actor 설계
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
public class MailBoxActor : ReceiveActor
{
private ILoggingAdapter log = Context.GetLogger();
public MailBoxActor()
{
Receive<Issue>(issue => {
log.Info("IssueInfo : Message:{0} IsSecurityFlaw:{1} IsBug:{2} ", issue.Message, issue.IsSecurityFlaw, issue.IsBug);
});
}
} |
정의코드를 사용하기위한 설정
...
No Format |
---|
#특정한 액터에 MailBox 메시지 처리기를 사용하겠다고 설정을 합니다.
my-custom-mailbox {
mailbox-type : "ServiceA.STUDY.IssueTrackerMailbox, ServiceA"
}
actor.deployment {
/mymailbox {
mailbox = my-custom-mailbox
}
}
|
실행코드
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
var mailboxOpt = Props.Create<MailBoxActor>().WithMailbox("my-custom-mailbox");
var actor = actorSystem.ActorOf(mailboxOpt, "mymailbox");
Issue msg1 = new Issue("test1",true);
Issue msg2 = new Issue("test2", false);
Issue msg3 = new Issue("test3", true);
Issue msg4 = new Issue("test4", true);
Issue msg5 = new Issue("test5", false);
actor.Tell(msg1);
actor.Tell(msg2);
actor.Tell(msg3);
actor.Tell(msg4);
actor.Tell(msg5); |
Expand | ||
---|---|---|
| ||
다양한 이슈를 썩어서 동시에 보냈지만, IsSecurityFlaw=true 인 메시지를 우선 처리하게 됩니다.
동시성 처리에 있어서 가급적 우선이란 의미가 맞을듯 하며 , 어느 외부적요인 혹은 동시성이 달라서
메시지 순서가 변경된다고 해도, 서비스에 이상이생기는 설계는 하지 말아야 할것입니다.