根据从Java的另一个异步网络服务中收到的响应来响应网络服务



我有一个要求,在某些情况下,作为Web服务[Java]的一部分,我在数据库中输入作业详细信息,该数据库是由Windows Service [C#]进行异步处理的,并制作一个http REST FALL拨打Java Web服务通知工作状态。

场景:

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

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

编辑:我已经使用泽西框架实现了RESTFULS服务,并在Jetty Server上运行。

取决于您使用的泽西岛和码头的版本,您可以使用Servlet 3.0中添加的异步处理请求的支持。(基于码头Wikipedia页面,我相信您至少需要基于本文的Jetty 8.x。我相信您至少需要泽西岛/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的任何响应来完成请求。p>另请参见:

异步JAX-RS

的目的是什么

jax-rs和长轮询

最新更新