我需要知道如何创建一个RoundRobinPool路由器Actor,其中每个路由器都有自己对另一个对象的引用。每个被保险人持有的参考资料对于每个被保险人必须是不同的。
这样做的方法是这样的:
ActorRef ref = system.actorOf(new RoundRobinPool(5).props(Props.create(Worker.class, new AnotherObject())),
"router");
但这种方法的问题在于每个工作者都对AnotherObject有相同的引用,我不希望这种副作用。
这将是这样的,但使用路由器角色:
List<Routee> routees = new ArrayList<Routee>();
for (int i = 0; i < 5; i++) {
ActorRef r = system.actorOf(Props.create(Worker.class, new AnotherObject()));
routees.add(new ActorRefRoutee(r));
}
Router router = new Router(new RoundRobinRoutingLogic(), routees); // That is a Router I need an ActorRef
有人知道怎么做吗?
干杯
答案 0 :(得分:1)
查看有关Router groups的Akka Java文档。您可以单独创建路由,然后通过配置或以编程方式将它们提供给路由器组。在您的情况下,编程可能是您所追求的,因此您可以向每个routee传递不同的引用。
答案 1 :(得分:0)
您可以使用RoundRobinGroup。使用组,您可以创建所需的actor,然后在创建组时将actor的路径传递给Group。池和组之间的区别仅在于如何创建路由。
使用实际代码编辑
String parent = new String("/user/<whatever is your actual path to routees>");
List<String> routees = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
ActorRef r = system.actorOf(Props.create(Worker.class, new AnotherObject()), “route” + i);
routees.add(parent + “routee” + i);
}
system.actorOf(new RoundRobinGroup(routees).props(), “router”);