0
我有簡單的UntypedActor其中有一組用戶。演員可以處理2種類型的消息('SUB' - 向訂閱者添加發件人,'UNSUB' - 從訂閱者刪除發件人)和其他消息重新發送給訂閱者。Akka路由與兩個路由器配置同時
private static class Dispatcher extends UntypedActor {
private Set<ActorRef> subscribers;
public Dispatcher() {
subscribers = Sets.newHashSet();
}
@Override
public void onReceive(Object o) throws Exception {
if ("SUB".equals(o)) {
subscribers.add(getSender());
return;
}
if ("UNSUB".equals(o)) {
subscribers.remove(getSender());
return;
}
for (ActorRef subscriber : subscribers) {
subscriber.tell(o, getSender());
}
}
}
我想用兩種不同的策略創建路由器:廣播,roundrobin。
final int routeeCount = 2;
BroadcastRouter broadcastRouter = new BroadcastRouter(routeeCount);
RoundRobinRouter roundRobinRouter = new RoundRobinRouter(routeeCount);
ActorRef broadCastRef = actorSystem.actorOf(Props.create(Dispatcher.class)
.withRouter(broadcastRouter), "Broadcast");
ActorRef roundRobinRef = actorSystem.actorOf(Props.create(Dispatcher.class)
.withRouter(roundRobinRouter), "RoundRobin");
每個路由器都會創建個人路由器組,但它不適合我。我想使用相同演員路由器,因爲我具有以下用例:
- 演員甲和乙發送消息「SUB」到broadCastRef;
- broadCastRef廣播消息發送到它自己的2個兒童演員(X1和X2)(routeeCount = 2);
- 從現在開始,我將使用roundRobinRef將消息傳遞給演員一個和乙。
所以問題是如何在兩個不同的路由器角色中重用角色?