Контрольный номер активных актеров типа - PullRequest
0 голосов
/ 25 мая 2018

Можно ли контролировать количество активных актеров в игре?В двух словах, у меня есть актер по имени AuthoriseVisaPaymentActor, который обрабатывает сообщение VisaPaymentMessage.У меня есть параллельный цикл, который отправляет 10 сообщений, но я пытаюсь создать что-то, что позволяет 3 актерам работать одновременно, а остальные 7 сообщений будут заблокированы и ожидают, когда актер будет доступен.Это возможно?В настоящее время я использую настройку RoundRobin, которую, как мне кажется, я неправильно понял.

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

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

1 Ответ

0 голосов
/ 29 мая 2018

Чтобы настроить пул / группы с циклическим изменением, вам нужно указать пути к действующим лицам.Это можно сделать статически в настройках hocon или динамически в коде (см. Ниже).Что касается блокирования сообщений, почтовые ящики 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"));
...