選項1
我剛通過使用DistributedPubSubMediator
如this question描述和記載here解決它。
private ActorRef mediator = DistributedPubSub.get(getContext().system()).mediator();
@Override
public void onReceive(Object msg) throws Exception {
String msgStr = msg.toString();
String val = msgStr.substring(4);
if (msgStr.startsWith("add")) {
ActorRef act = context().actorOf(Props.create(User.class, val), val);
// subscribe the newly created user on topic "allUsers"
mediator.tell(new DistributedPubSubMediator.Subscribe("allUsers", act), self());
System.out.println("user created: " + act);
} else if (msgStr.startsWith("say")) {
// broadcast text message to all subscribed users
mediator.tell(new DistributedPubSubMediator.Publish("allUsers", new Text(val)), self());
}
}
選項2
第二成功的選擇是通過使用BroadcastGroup路由器。重要的是,在配置中啓用集羣:
akka.actor.deployment {
/allUsers {
router = broadcast-group
routees.paths = ["/user/service/*"]
cluster {
enabled = on
allow-local-routees = on
}
}
}
之後,它可以直接使用,如記錄。
ActorRef allUsers = system.actorOf(FromConfig.getInstance().props(), "allUsers");
[...]
allUsers.tell(new Text(val), self());