【问题标题】:Responding to a web-service based on response received from another asynchronous web-service in Java根据从 Java 中另一个异步 Web 服务接收到的响应响应 Web 服务
【发布时间】:2014-02-13 04:54:10
【问题描述】:

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

场景:

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

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

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

【问题讨论】:

    标签: java web-services rest jersey orchestration


    【解决方案1】:

    根据您使用的 Jersey 和 Jetty 版本,您可能可以使用 Servlet 3.0 中添加的对 asynchronously handling requests 的支持。 (基于Jetty Wikipedia page,我相信你至少需要Jetty 8.x。基于this article,我相信你至少需要Jersey/JAX-RS 2.0。)

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

    @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 来完成请求,并将您想要发送到的任何响应发送到客户。

    另见:

    What is the purpose of asynchronous JAX-RS

    JAX-RS and Long Polling

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多