Router即路由,是負責負載均衡和路由的抽象,有兩種方法來創建router,1.Actor Group 2,Actor Pool
兩者區別:
pool: 有Router來創建Actor
Group:創建時傳入已經創建好的Actor Group
下面僅以Pool方式爲例來介紹具體的編碼方式
@RestController
public class AdhaAkkaDetect {
public void detect(String detectStatus, int detectCount) {
ActorSystem actorSystem = ActorSystem.create("detectTask");
ActorRef routerActorRef = actorSystem.actorOf(
Props.create(DetectRouterActor.class).withRouter(new SmallestMailboxPool(50000)),
"detectRouterActor");
System.out.println("into detect function,resultActorRef=" + resultActorRef.path());
routerActorRef.tell(new MapMessage(instance, connectMap), ActorRef.noSender());
}
}
還有很多的路由方式
比如可以將new SmallestMailboxPool換位其他
SmallestMailboxPool:表示Router創建的所有Actor中誰郵箱中的消息最少發給誰
RoundRobinPool: 表示依次往復循環發送
還有些路由邏輯詳細參考:http://doc.akka.io/docs/akka/current/java/routing.html
最後還要解釋下像Router發送消息跟發送給普通的Actor一模一樣,直接獲得引用.tell就好了