akka-streams + актеры akka: mapAsyncUnordered + ask Pattern - PullRequest
0 голосов
/ 04 октября 2018

Я уже некоторое время работаю с akka-актерами и akka-cluster.Недавно у меня было требование добавить противодавление к коду, и я использовал собственный шаблон mapasyncUnordered + ask akka-streams (порядок сообщений не имеет значения), чтобы решить эту проблему.

public class A extends AbstractActor {
    public Receive createReceive() {
        return receiveBuilder()
                .match(String.class, this::start)
                .build()
    }

    private void start(String msg){
        getSender().tell(1,getSelf()); // acknowledgement for ask()
        List<String> x = new ArrayList<>();
        for(String h : children)
            x.add(h);
        Source.from(x)
            .mapAsyncUnordered(2, s -> ask(getSelf(),s,askTimeout))
            .runWith(Sink.ignore(), mat);
    }
}

Проблема схожа с исследованием дерева.

Если дерево маленькое, похоже, оно работает нормально.Но если дерево увеличивается в размере, код, похоже, застрял и не работает.Дерево может достигать 100 миллионов узлов или даже больше.

Может кто-нибудь помочь мне с тем, как заставить его работать, или предложить лучший способ сделать это.

...