当前位置: 首页 > 面试题库 >

了解Akka演员存在的三种方法

双浩涆
2023-03-14
问题内容

我正在研究akka演员(JAVA),最近才知道有3种方法(可能更多)来了解演员的存在。

  1. 发送识别消息
        ActorSelection sel = actorSystem.actorSelection("akka://test/user/TestActor");
    AskableActorSelection asker = new AskableActorSelection(sel);
    Future<Object> future = asker.ask(new Identify(1), new Timeout(5,
            TimeUnit.SECONDS));
    ActorIdentity identity = (ActorIdentity) Await.result(future, timeOut.duration());
    ActorRef reference = identity.getRef();
    if(reference != null){
      // Actor exists
    } else {
    // Actor does not exits
    }
  1. resolveOne方法
        ActorSelection sel = actorSystem.actorSelection("akka://test/user/TestActor");
    Future<ActorRef> future = sel.resolveOne(new Timeout(5,
            TimeUnit.SECONDS));
    // Wait for the completion of task to be completed.
    future.onComplete(new OnComplete<ActorRef>() {
        @Override
        public void onComplete(Throwable excp, ActorRef child)
                throws Throwable {
            // ActorNotFound will be the Throwable if actor not exists
            if (excp != null) {
                    // Actor does not exists
            } else {
                // Actor exits
            }
        }
    }, actorSystem.dispatcher());
  1. DeatchWatch :创建另一个actor调用 getContext()。watch(actorToWatch的ActorRef); 并检查是否收到 终止 消息。这只能用于已经创建的actor。

1,2告诉演员和3个监视器的存在。我想知道这三个的用例及其对参与者邮箱和功能的影响,以便我可以选择适合我的应用程序的类型。

检查演员是否存在是一个好习惯吗? 如果不是,为什么?


问题答案:

好吧,只有一种方法可以知道过去某个时刻是否存在Actor:如果您从中收到消息。以上所有只是这个主题的变体。

就是说,一旦有了ActorRef,就可以使用DeathWatch通知该演员终止的消息。但是尚未收到Terminated消息并不表示演员还活着:Terminated可能已经在路上。

将Actor视为只能通过发送电子邮件进行交流的人。这种类比对于它们交互的语义非常有效。



 类似资料:
  • 我正在研究akka actors(JAVA),最近我知道有3种方法(可能更多)来了解一个演员的存在。 > 解决方法之一: DeatchWatch:创建另一个参与者调用getContext()。手表(ActorWatch的ActorRef);并检查是否接收到终止的消息。这只能用于已创建的参与者。 1,2表示存在参与者和3个监视器。我想知道这三个应用程序的用例以及它们对actors邮箱和功能的影响,以

  • java.util.concurrent.CompletionException:Akka.Pattern.AskTimeoutException:收件人[Actor[akka:/web_server/user/MyActor#-769383443]]已终止。发送者[null]发送了类型为“com.data.model.request”的消息。 所以我重写了方法,在那里添加了一个log语句。 现在

  • 我很难理解Akka中的演员,以及一个线索如何与一个演员相关联。 让我们以Fridge Actor和Person Actor向Fridge Actor引用发送GetFoodMessage为例。假设不变性受到尊重。 这些消息是在不同的线程中“同时”处理,还是在队列中一个接一个地处理? 线程产卵是否完全由库管理并从actor的概念中抽象出来? 参与者引用是参与者的实例吗? 当我阻止一个演员(和他的孩子)

  • 我很想知道调整大小,或者在本例中增加单个节点系统上的actor池中actor的数量是否真的会影响性能。 我有一个带超线程的四核系统。在任何给定的点上,系统可以运行8个线程。假设执行元执行的大多数操作都是CPU绑定的,那么将池中的执行元数量从20个增加到40个会有什么收获呢?

  • 问题内容: 我有一个不是actor的java对象,它使用actorSelection(Path)从一个actor系统中选择actor。系统中可能不存在所选参与者。 在Java Api中,ActorSelection不存在ask(),因此我无法向actor选择发送和标识消息并使用响应的发送者。 我试图通过演员选择将消息发送给演员,然后对死信做出反应来解决该问题。但是我没有任何死信。 如何通过Acto

  • 我经常发现自己使用一个“主”角色,为子任务创建许多子角色。当子任务完成时,主角也应该停止自己。所以当时,我观察子角色并停止主角色context.children.is。 我经常使用这种模式,但因为我从未读过这方面的文章。我不确定,这是一个好主意还是失败的演员有问题。。。? 我已经读过Akka 2中的关机模式,但是这种方法在Java中似乎比我的解决方案更复杂? 以下是我针对具有两个子任务的主要参与者