相关疑难解决方法(0)

按需演员得到或否则创造

我可以创建演员,actorOf并与他们一起看actorFor.我现在想要一些演员id:String,如果它不存在,我希望它被创建.像这样的东西:

  def getRCActor(id: String):ActorRef = {
    Logger.info("getting actor %s".format(id))
    var a = system.actorFor(id)
    if(a.isTerminated){
      Logger.info("actor is terminated, creating new one")
      return system.actorOf(Props[RC], id:String)
    }else{
      return a
    }
   }
Run Code Online (Sandbox Code Playgroud)

但这并不isTerminated总是如此,我得到actor name 1 is not unique!了第二次调用的异常.我想我在这里使用了错误的模式.有人可以帮助如何实现这一目标吗?我需要

  • 按需创建演员
  • 通过id查找actor,如果不存在则创建它们
  • 能够摧毁,因为我不知道我是否会再次需要它

我应该使用Dispatcher或Router吗?

解决方案 如我所建议的,我使用一个具体的Supervisor来保存地图中可用的actor.可以要求他提供他的一个孩子.

class RCSupervisor extends Actor {

  implicit val timeout = Timeout(1 second)
  var as = Map.empty[String, ActorRef]

  def getRCActor(id: String) = as get id getOrElse {
    val c = context actorOf …
Run Code Online (Sandbox Code Playgroud)

scala akka

23
推荐指数
2
解决办法
6042
查看次数

获得现有或创建新的akka​​演员

我正在尝试使用ActorFor获取现有的ActorRef,或者如果它不存在则创建一个新的ActorRef.我有以下代码,但它似乎没有按预期工作..isTerminated()始终为true.

ActorSystem system = ActorSystem.create("System");

            ActorRef subscriberCandidate = system.actorFor("akka://System/user/"+name);

            if (subscriberCandidate.isTerminated())
            {
                ActorRef subscriber = system.actorOf(new Props(new UntypedActorFactory() {
                      public UntypedActor create() {
                        return new Sub(name,link);
                      }
                    }), name);
                System.out.println(subscriber.path().toString() + " created");
            }
            else
                System.out.println("already exists"); 
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?提前致谢.

java actor akka

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

akka ×2

actor ×1

java ×1

scala ×1