我已经和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亿个节点,甚至更多。
有人可以帮助我使它正常工作还是提出更好的方法。