[英]How to create multiple actors and keep a list of them in AKKA java?
我正在创建一个演员系统,以便需要将一个演员实例分配给列表中的每个 object,我通过在 object 和演员中都有一个名为 uri 的字符串属性来做到这一点,并给它们相同的值来找出哪个actor被分配给哪个object,我的系统的意图是允许另一个服务直接向分配给所选object的Actor发送消息
String[]workers;
ArrayList<Actor> listOfActors = new Arraylist<Actors>();
public WorkerService(ActorSystem system) {
for(String workerName:workers){
final ActorRef hello =
system.actorOf(Props.create(Actor.class),workerName);
listOfActors.add(hello);
}
我知道代码有很多流程,即所有演员的 ActorRef 名称相同,如何解决这个问题? 他们是我可以仅通过名称属性来区分演员的一种方式吗? 我真的被卡住了,任何帮助将不胜感激:)
当Map
符合要求时,为什么要使用List
?
在任何情况下,在 Akka 中,您看到Actor
类型的唯一时间是您定义演员的 class (即class MyActor extends Actor
)。 Actor
代表一个 Actor 的行为,而不是其他代码可以使用的 Actor(通过使用,我的意思是“向”发送消息,因为这基本上是一个 Actor 唯一擅长的事情),它最终由一个ActorRef
表示。 Akka Typed 通过具有Behavior
和ActorRef
了这种混乱。
String[] workers;
Map<String, ActorRef> actors = new HashMap<String, ActorRef>();
public WorkerService(ActorSystem system) {
for (String workerName : workers) {
if (actors.containsKey(workerName)) {
throw new AssertionError("Should not have duplicate workers...") // or maybe an IllegalArgumentException, depending on how workers is getting set
} else {
ActorRef actor = system.actorOf(Props.create(WorkerActor.class), workerName);
actors.put(workerName, actor)
}
}
}
然后,如果在您的工作人员服务中的某个地方,您需要向具有给定名称的演员发送消息:
ActorRef target = actors.get(name)
if (target != null) {
target.tell(message)
}
免责声明,我已经很多年没有真正写过任何 Java,但希望这个想法能够得到实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.