繁体   English   中英

基于从Java中的另一个异步Web服务接收到的响应来响应Web服务

[英]Responding to a web-service based on response received from another asynchronous web-service in Java

我有一个要求,在其中,作为Web服务[Java]的一部分,我将作业的详细信息输入数据库中,该工作由Windows服务[C#]异步处理,并对Java Web服务进行HTTP Restful调用以通知状态工作。

场景:

  • 客户端对Java Web Service进行同步的Restful调用。
  • Java Web Service将作业详细信息输入数据库(类似于进行异步调用),并等待Windows Service返回的响应(这是对Java Web Service的新HTTP请求)。
  • 基于收到的响应,Java Web Service需要响应正在等待同步调用的客户端。

我们如何在Java Web Service中实现这一目标?

编辑:我已经使用Jersey框架实现了宁静的Web服务,并且在Jetty服务器上运行。

根据所使用的Jersey和Jetty版本,您可以使用该支持异步处理 Servlet 3.0中添加的请求 (基于Jetty Wikipedia页面 ,我相信您至少需要Jetty8.x。根据本文 ,我相信您至少需要Jersey / JAX-RS 2.0。)

Jersey文档JAX-RS API文档提供了有关如何异步(即在另一个线程中)完成未完成请求的示例:

@Path("/resource")
public class AsyncResource {
    @GET
    public void asyncGet(@Suspended final AsyncResponse asyncResponse) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                String result = veryExpensiveOperation();
                asyncResponse.resume(result);
            }

            private String veryExpensiveOperation() {
                // ... very expensive operation
            }
        }).start();
    }
}

在您的情况下,您将以这样一种方式存储AsyncResponse对象,即,一旦您从其他Web服务接收到响应,就可以通过调用resume并通过您想要发送给客户端的任何响应来完成请求。

也可以看看:

异步JAX-RS的目的是什么

JAX-RS和长轮询

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM