控制一个类型的活动参与者的数量

时间:2018-05-25 14:30:01

标签: akka akka.net

是否可以控制游戏中活跃演员的数量?简而言之,我有一个名为AuthoriseVisaPaymentActor的演员来处理消息VisaPaymentMessage。我有一个发送10条消息的并行循环,但我正在尝试创建一些允许3个actor同时工作的东西,其他7条消息将被阻止并等待一个actor可用。这可能吗?我目前正在使用RoundRobin设置,我相信我误解了..

            var actor = sys.ActorOf(
                Props.Create<AuthoriseVisaPaymentActor>().WithRouter(new RoundRobinPool(1)));

            actor.Tell(new VisaPaymentMessage(curr.ToString(), 9.99M, "4444"));

1 个答案:

答案 0 :(得分:0)

要设置循环池/组,您需要指定要使用的actor路径。这可以在hocon settings中静态完成,也可以在代码中动态完成(参见下文)。对于被阻止的消息,Akka的邮箱已经为您做到了;在处理当前处理的消息之前,它不会处理任何新消息。它只是将它们保持在队列中,直到演员准备好处理它。

// Setup the three actors
var actor1 = sys.ActorOf(Props.Create<AuthoriseVisaPaymentActor>());
var actor2 = sys.ActorOf(Props.Create<AuthoriseVisaPaymentActor>());
var actor3 = sys.ActorOf(Props.Create<AuthoriseVisaPaymentActor>());

// Get their paths
var routees = new[] { actor1.Path.ToString(), actor2.Path.ToString(), actor3.Path.ToString() };

// Create a new actor with a router
var router = sys.ActorOf(Props.Empty.WithRouter(new RoundRobinGroup(routees)));

router.Tell(new VisaPaymentMessage(curr.ToString(), 9.99M, "4444"));