首页 > 解决方案 > akka-streams + akka 演员:mapAsyncUnordered + 询问模式问题

问题描述

我一直在使用 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 亿个节点甚至更多。

有人可以帮助我如何使其工作或提出更好的方法。

标签: javaakkaakka-streamakka-clusterakka-actor

解决方案


推荐阅读