我如何检查Akka演员是否存在(akka 2.2)?

尖峰:

我有一个不是actor的java对象,它使用actorSelection(Path)从一个actor系统中选择actor。系统中可能不存在所选参与者。

在Java Api中,ActorSelection不存在ask(),因此我无法向actor选择发送和标识消息并使用响应的发送者。

我试图通过演员选择将消息发送给演员,然后对死信做出反应来解决该问题。但是我没有任何死信。

如何通过ActorSelection检查演员是否还活着?

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

//create test actor
system.actorOf(Props.create(TestActor.class), "testActor");

//add dead letter listener to the system
ActorRef eventBusActor = asys.actorOf(Props.create(EventBusActor.class), "eventbusactor");
system.eventStream().subscribe(eventBusActor, DeadLetter.class);


//This works. The test actor receives the message      
ActorSelection a1 = asys.actorSelection("/user/testActor");
a1.tell("hello", ActorRef.noSender());

//This does not work and does not send dead letters      
ActorSelection a2 = asys.actorSelection("/user/doesnotexist");
a2.tell("hello", ActorRef.noSender());

//Does not compile, because ask needs an ActorRef as first argument
ActorSelection a3 = asys.actorSelection("/user/test");
Future f = Patterns.ask(a3, new Identify(), 1000);
cmbaxter:

看起来Akka放弃了ActorSelection对Java api的支持ask我玩了一点代码,但是发现了一些可行的方法。查看此代码是否对您有用:

import java.util.concurrent.TimeUnit;

import scala.concurrent.Await;
import scala.concurrent.Future;

import akka.actor.ActorIdentity;
import akka.actor.ActorRef;
import akka.actor.ActorSelection;
import akka.actor.ActorSystem;
import akka.actor.Identify;
import akka.actor.Props;
import akka.pattern.AskableActorSelection;
import akka.util.Timeout;

public class AskTest {

  public static void main(String[] args) throws Exception{
    ActorSystem sys = ActorSystem.apply("test");
    sys.actorOf(Props.create(TestActor.class), "mytest");

    ActorSelection sel = sys.actorSelection("/user/mytest");

    Timeout t = new Timeout(5, TimeUnit.SECONDS);
    AskableActorSelection asker = new AskableActorSelection(sel);
    Future<Object> fut = asker.ask(new Identify(1), t);
    ActorIdentity ident = (ActorIdentity)Await.result(fut, t.duration());
    ActorRef ref = ident.getRef();
    System.out.println(ref == null);
  }
}

我只是研究了scala请求支持的工作方式,并通过java对其进行了挂钩。这对我有用;我希望它对您有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Play Framework 2应用程序中存储Akka演员列表?

如何检查字段是否以symfony2形式存在?

如何检查yii2关系是否存在show controller

如何检查关系是否存在?M2M

如何使用Fabric2.x检查路径是否存在

AKKA远程演员可以在p2p群组环境中使用吗?

检查另外 2 列中是否存在 2 列

如何检查数字是否为2的幂

如何检查2条线段是否相交?

如何检查a是否为2的幂

如何检查2个陈述是否正确

Laravel-如何检查2个用户之间是否存在对话-邮件系统

如何检查word2vec训练模型中是否存在密钥

如何用Kotlin检查2D数组中是否存在值?

熊猫如何使用apply函数检查是否存在2个值

Sencha Touch 2-如何检查ViewPort中是否存在项目

如何使用Power Shell检查SQL Server 2008 R2数据库是否存在

如何使用2个字段检查SQL Server 2000中是否存在记录

如何检查symfony2中是否已存在某个文件?

如何使用angularfire2检查孩子是否存在于firebase列表中

如何检查硒(python 2)中是否存在某个元素,而没有抛出NoSuchElement异常呢?

如何检查数组1中每个值的顺序,是否存在于数组2中并删除?

如何检查$ array1中的每个值是否在$ array2中存在

如何检查2D数组中是否存在所有请求的值?

Laravel 8 如何连接 2 个表并检查值是否存在

检查Scala / Akka演员是否已终止

Akka authenticateOAuth2Async:凭据丢失

使用Specs2测试Akka

lua array2d检查值是否存在