Как использовать Akka.net с роутером - PullRequest
0 голосов
/ 01 ноября 2019

Я начал использовать akka.net, но он идет очень медленно. Итак, в основном то, что у меня есть:

Http-вызов, который генерирует от 10 до 100 запросов.

эти объекты запросов отправляются субъекту:

 var system = ActorSystem.Create("MySystem");
                    var searcher = system.ActorOf<generalSearchActor>("searcherAll");
                    searcher.Tell(sortedRequests);

Затем внутриАктер, я создал маршрутизатор и сообщаю маршрутизатору все запросы:

public generalSearchActor()
{
    Receive<List<HotelAvRequest>>(searchList =>
    {
        try { 
        Props props = new RoundRobinPool(5).Props(Props.Create<providerSearchActor>());
        var system = ActorSystem.Create("MySystem");
        var searcher = system.ActorOf(props, "searcher");

        foreach (var reques in searchList)
        {

            searcher.Tell(reques);

        }
        }catch(Exception e)
        {
            string a = "";
        }
    }
  );
}

Он работает, но обрабатывает много. Пока пульт не добавлен.

Извините, я знаю, что есть документация, но я просто не уверен, что делаю что-то не так

Спасибо

1 Ответ

0 голосов
/ 02 ноября 2019

Вы, кажется, инициализируете две отдельные системы актеров. Один в начале, а другой внутри вашего 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, порожденные маршрутизатором Искатель , они его дети.

...