Я уже некоторое время работаю с 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 миллионов узлов или даже больше.
Может кто-нибудь помочь мне с тем, как заставить его работать, или предложить лучший способ сделать это.