我是新玩框架和AKKA,我是一名Java开发人员 . 我使用Play 2.3.7和IntelliJ 14.我调用了Pattern.ask,它返回一个Future对象,该对象具有来自Web服务调用的String . 通过控制台我可以发现我的演员能够接收请求并执行操作 . 我不知道如何解析它 . 我试图通过使用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
演员的回复?
2 回答
您必须注意标准Java类型和Akka类型之间的名称冲突 . 例如,Java具有
java.util.concurrent.Future
类型,而Akka的Patterns.ask()
返回akka.dispatch.Future
.检查你的演员表到
Future<Object>
. 它永远不会在运行时工作,并且稍后会检测到类型不兼容,因为Java 's future as nothing to do with Akka' sAwaitable
.我找到了一种解析演员回应的方法 . 创建一个函数,包装您的未来并将其映射到一个函数,该函数将检查响应的实例类型并返回Result . 以下是工作代码段 .