我正在使用akka和java,并寻找一种方法来使用akka actor中的异步Play WS api。
在游戏WS 2.4.x中,方法WSRequest.get()
返回一个F.Promise
,可以很容易地转换为Scala Future
,然后用akka.pattern.Patterns.pipe
传递给某个akka actor按顺序要作为akka消息接收的http响应。
在游戏WS 2.5.x中,方法WSRequest.get()
返回CompletionStage
,我无法弄清楚如何将它传递给Akka演员。
那么如何在Akka演员中正确使用play WS 2.5.x api?
答案 0 :(得分:4)
虽然Play 2.4是针对Scala 2.10和Scala进行交叉编译的 2.11,这个新版本的Play仅适用于Scala 2.11。放弃Scala 2.10支持的原因是Play有一个新的库 依赖于scala-java8-compat,它仅适用于Scala 2.11。这个库可以很容易地从常见的Scala和Java8类型转换,因此简化Play核心很有价值。 此外,您可能还会发现在自己的Play中使用它很方便 项目。例如,如果您需要转换Scala Future实例 进入Java CompletionStage(或其他方式)。
我非常确定you can still do it easy:
import static scala.compat.java8.FutureConverters.*;
...
final Promise<String> p = promise();
final Future<String> sf = p.future();
final CompletionStage<String> cs = toJava(sf);
Future<String> sf1 = toScala(cs);