Вы, кажется, инициализируете две отдельные системы актеров. Один в начале, а другой внутри вашего generalSearchActor
. Вероятно, это является причиной замедления, которое вы испытываете.
Akka.net должен работать с иерархической структурой актеров. Инициализируя систему акторов, вы автоматически создаете актера верхнего уровня, тогда другие актеры должны следовать за ним как за дочерним актером высшего уровня, так и за дочерними объектами других дочерних элементов (они могут быть вложены несколько раз).
Вы правильно создаете дочерний элементактера верхнего уровня здесь:
var system = ActorSystem.Create("MySystem");
var searcher = system.ActorOf<generalSearchActor>("searcherAll");
searcher.Tell(sortedRequests);
Однако, чтобы создать другого актора из актера, вы должны использовать свойство Context
:
Props props = new RoundRobinPool(5).Props(Props.Create<providerSearchActor>());
var searcher = Context.ActorOf(props, "searcher");
Полученная иерархия акторов будет выглядетьаналогично:
- MySystem / пользователь / поисковикВсе
- MySystem / пользователь / поисковикВсе / поисковик
- MySystem / пользователь / searcherAll / searcher / c1
- MySystem / user / searcherAll / searcher / c2
- MySystem / user / searcherAll / searcher/ c3
- MySystem / пользователь / поисковикВсе / поисковик / c4
- MySystem / пользователь / поисковикВсе / поисковик / c5
searcherAll - это экземпляр generalSearchActor
, это дочерний элемент верхнего уровняl актер.
искатель - это актер маршрутизатора, он является потомком searcherAll актер.
c1 через c5 - это экземпляры providerSearchActor
, порожденные маршрутизатором Искатель , они его дети.