我是框架和AKKA的新手,我是一名Java开发人员。我使用 Play 2.3.7 和 IntelliJ 14。我调用了 Pattern.ask,这会返回一个 Future 对象,该对象具有来自 Web 服务调用的字符串。通过控制台我可以发现我的 Actor 能够接收请求并执行操作。我不知道如何解析它。我正在尝试使用 Await.result 来读取 Future。但是这个 Await.result 需要等待对象。如果我传递 Future 对象,它会抛出编译器异常。请帮忙。
public Result invoke(String message) {
try {
System.out.println("invoke ");
MySampleMessage msg = new MySampleMessage(message);
System.out.println(msg.getMessage());
Future<Object> futr = (Future<Object>) Patterns.ask(myActor, msg, localConfig.getTimeOut());
System.out.println("invoke 1");
////Promise<Object> promise = Promise.wrap(futfure);
String msg1 = Await.result(futr, Duration.create(10, TimeUnit.MILLISECONDS));
System.out.println("invoke 2 ");
return play.mvc.Results.ok("Success " + msg1);
}
catch(Exception e)
{
return (play.mvc.Results.ok("Exception"));
}
}
是否有其他方法可以解析来自 async
actor 的响应?
最佳答案
您必须小心标准 java 类型和 Akka 类型之间的名称冲突。例如,Java 有 java.util.concurrent.Future
输入 Akka 的 Patterns.ask()
返回 akka.dispatch.Future
.
检查您的类型转换 Future<Object>
。它永远不会在运行时工作,并且稍后会检测到类型不兼容性,因为 Java 的 future 与 Akka 的 Awaitable
无关。 .
关于java - 玩 Java Akka - Await.result 期待可等待对象但不接受 Future<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30864996/