60 lines
2.2 KiB
Java
60 lines
2.2 KiB
Java
|
|
/**
|
||
|
|
* Copyright (C) 2009-2012 Typesafe Inc. <http://www.typesafe.com>
|
||
|
|
*/
|
||
|
|
package akka.docs.jrouting;
|
||
|
|
|
||
|
|
import akka.routing.ScatterGatherFirstCompletedRouter;
|
||
|
|
import akka.routing.BroadcastRouter;
|
||
|
|
import akka.routing.RandomRouter;
|
||
|
|
import akka.routing.RoundRobinRouter;
|
||
|
|
import akka.actor.UntypedActor;
|
||
|
|
import akka.actor.ActorRef;
|
||
|
|
import akka.actor.Props;
|
||
|
|
import akka.util.Duration;
|
||
|
|
import akka.util.Timeout;
|
||
|
|
import akka.dispatch.Future;
|
||
|
|
import akka.dispatch.Await;
|
||
|
|
|
||
|
|
//#parentActor
|
||
|
|
public class ParentActor extends UntypedActor {
|
||
|
|
public void onReceive(Object msg) {
|
||
|
|
if (msg.equals("rrr")) {
|
||
|
|
//#roundRobinRouter
|
||
|
|
ActorRef roundRobinRouter = getContext().actorOf(
|
||
|
|
new Props(PrintlnActor.class).withRouter(new RoundRobinRouter(5)), "router");
|
||
|
|
for (int i = 1; i <= 10; i++) {
|
||
|
|
roundRobinRouter.tell(i, getSelf());
|
||
|
|
}
|
||
|
|
//#roundRobinRouter
|
||
|
|
} else if (msg.equals("rr")) {
|
||
|
|
//#randomRouter
|
||
|
|
ActorRef randomRouter = getContext().actorOf(new Props(PrintlnActor.class).withRouter(new RandomRouter(5)),
|
||
|
|
"router");
|
||
|
|
for (int i = 1; i <= 10; i++) {
|
||
|
|
randomRouter.tell(i, getSelf());
|
||
|
|
}
|
||
|
|
//#randomRouter
|
||
|
|
} else if (msg.equals("br")) {
|
||
|
|
//#broadcastRouter
|
||
|
|
ActorRef broadcastRouter = getContext().actorOf(new Props(PrintlnActor.class).withRouter(new BroadcastRouter(5)),
|
||
|
|
"router");
|
||
|
|
broadcastRouter.tell("this is a broadcast message", getSelf());
|
||
|
|
//#broadcastRouter
|
||
|
|
} else if (msg.equals("sgfcr")) {
|
||
|
|
//#scatterGatherFirstCompletedRouter
|
||
|
|
ActorRef scatterGatherFirstCompletedRouter = getContext().actorOf(
|
||
|
|
new Props(FibonacciActor.class).withRouter(new ScatterGatherFirstCompletedRouter(5, Duration
|
||
|
|
.parse("2 seconds"))), "router");
|
||
|
|
Timeout timeout = getContext().system().settings().ActorTimeout();
|
||
|
|
Future<Object> futureResult = scatterGatherFirstCompletedRouter.ask(new FibonacciActor.FibonacciNumber(10),
|
||
|
|
timeout);
|
||
|
|
int result = (Integer) Await.result(futureResult, timeout.duration());
|
||
|
|
//#scatterGatherFirstCompletedRouter
|
||
|
|
System.out.println(String.format("The result of calculating Fibonacci for 10 is %d", result));
|
||
|
|
} else {
|
||
|
|
unhandled(msg);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//#parentActor
|