akka流+ akka演员:mapAsyncUnordered +询问模式问题

时间:2018-10-04 18:14:52

标签: java akka akka-stream akka-cluster akka-actor

我已经和akka-actors和akka-cluster合作了一段时间了。最近,我有一个向代码添加反压的要求,并使用了akka-streams本机模式mapAsyncUnordered + ask(消息顺序无关紧要)来解决此问题。

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);
    }
}

问题类似于探索一棵树。

如果树很小,这似乎可以正常工作。但是,如果树的大小增加,则代码似乎被卡住并且无法运行。树可能多达1亿个节点,甚至更多。

有人可以帮助我使它正常工作还是提出更好的方法。

0 个答案:

没有答案