Java Play框架-平衡异步和非阻塞

Java Play框架-平衡异步和非阻塞,java,asynchronous,playframework,playframework-2.0,Java,Asynchronous,Playframework,Playframework 2.0,我正在寻找一个灯泡的时刻,但还没有得到它!在Java8中使用PlayFramework2.5.9,并尝试遵循异步、非阻塞模型的良好实践 因此,我的play应用程序公开了一个REST服务。对其中一个端点的GET请求将数据返回给客户端。为了检索其中一些数据,我的REST服务需要调用另一个服务 通过异步和非阻塞地调用另一个服务,我无法将该服务的响应中的数据包含在对我的服务的响应中 我想我希望从我的服务到另一个服务的调用是同步的,但不阻塞?这样,当我等待另一个服务的响应时,在我的服务中处理请求的线程被释

我正在寻找一个灯泡的时刻,但还没有得到它!在Java8中使用PlayFramework2.5.9,并尝试遵循异步、非阻塞模型的良好实践

因此,我的play应用程序公开了一个REST服务。对其中一个端点的GET请求将数据返回给客户端。为了检索其中一些数据,我的REST服务需要调用另一个服务

通过异步和非阻塞地调用另一个服务,我无法将该服务的响应中的数据包含在对我的服务的响应中

我想我希望从我的服务到另一个服务的调用是同步的,但不阻塞?这样,当我等待另一个服务的响应时,在我的服务中处理请求的线程被释放出来做其他事情。我仍然可以在对我的服务的响应中包含来自其他服务中的响应的数据。是这样吗

下面是我当前的代码,它是异步的(我不想要)和非阻塞的(我想要):


我希望jsonResult从jsonResult中提取数据,并在对我的服务的响应中返回数据。感谢您的建议。

异步播放流程操作。因此,您可以从操作返回
CompletionStage

您需要将
然后accept
更改为
然后apply
,并将结果字符串
new Date().toString()…
包装为
结果

public CompletionStage<Result> apiData(){
       WSRequest request = ws.url(endpointUrl);
       return request.get()
                .thenApply(WSResponse::asJson)
                .thenApply(
                        jsonResult -> {
                            return ok(new Date().toString() + " "+ jsonResult.get("blah").get("bluh"));
                        }
                );
}
public CompletionStage apiData(){
WSRequest-request=ws.url(endpointUrl);
返回请求。get()
.thenApply(WSResponse::asJson)
.然后申请(
jsonResult->{
返回ok(newdate().toString()+“”+jsonResult.get(“blah”).get(“bluh”));
}
);
}

异步播放进程操作。因此,您可以从操作返回
CompletionStage

您需要将
然后accept
更改为
然后apply
,并将结果字符串
new Date().toString()…
包装为
结果

public CompletionStage<Result> apiData(){
       WSRequest request = ws.url(endpointUrl);
       return request.get()
                .thenApply(WSResponse::asJson)
                .thenApply(
                        jsonResult -> {
                            return ok(new Date().toString() + " "+ jsonResult.get("blah").get("bluh"));
                        }
                );
}
public CompletionStage apiData(){
WSRequest-request=ws.url(endpointUrl);
返回请求。get()
.thenApply(WSResponse::asJson)
.然后申请(
jsonResult->{
返回ok(newdate().toString()+“”+jsonResult.get(“blah”).get(“bluh”));
}
);
}