Код:Ограничение Java Akka при использовании маршрутизатора?
public class TestAkka {
public static void main(String[] args) throws InterruptedException {
ActorSystem system = ActorSystem.create("ExampleRouter", ConfigFactory.load().getConfig("MyRouter"));
ActorRef router = system.actorOf(Props.create(Hello.class).withRouter(new FromConfig()), "exampleRouter");
for (int i = 0; i < 100; i++) {
router.tell(new Website().getNameByIndex(i), router);
}
}
public static class Hello extends UntypedActor {
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof String) {
System.out.println("Hello " + message);
URL url = new URL("http://" + message + ":80");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
System.out.println(conn.getResponseCode());
Thread.sleep(10000); // <-- Sim the job take a short time
} else {
unhandled(message);
}
}
}
}
application.conf является:
MyRouter{
akka {
actor {
deployment {
/exampleRouter {
router = round-robin-pool
nr-of-instances = 100
}
}
}
}
}
В результате я могу только увидеть 8 параллельных заданий работают каждый раз, но мои ожидания 100 параллельных заданий должны работать одновременно! он все еще требует каких-либо настроек?
ОБНОВЛЕНО на 2016/06/06: Я изменил свой код, и результат - это мое ожидание с переопределением application.conf, он может одновременно выполнять 100 одновременных заданий. На самом деле, как оптимизировать диспетчер по умолчанию для высокого одновременного приложения?
String s = ""
+ "akka {\n"
+ " actor {\n"
+ " deployment {\n"
+ " /router {\n"
+ " router = round-robin-pool\n"
+ " nr-of-instances = 10000\n"
+ " }\n"
+ " }\n"
+ " default-dispatcher {\n"
+ " fork-join-executor {\n"
+ " parallelism-min = 200\n"
+ " parallelism-max = 5000\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ "}\n";
ActorSystem as = ActorSystem.create("as", ConfigFactory.parseString(s));
ActorRef ar = as.actorOf(Props.create(Hello.class).withRouter(new FromConfig()), "router");
У меня вопрос, что параметр thinkput = 100 в application.conf , каково фактическое использование для использования 100 или 1? какое условие может использовать 1 или 100? Фактически, я не очень понимаю документ, так как нет никаких примеров действий для его объяснения. –
Я не понимаю, что некоторые примеры задают thinkput = 100, как я могу его использовать? –