我一直在使用 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 亿个节点甚至更多。
有人可以帮助我如何使其工作或提出更好的方法。