【问题标题】:Wait for data to download in RESTful Webservice在 RESTful Web 服务中等待数据下载
【发布时间】:2014-02-14 19:21:55
【问题描述】:

我正在发送一个请求以获取服务器端 RESTful web 服务上的数据, 现在在我的网络服务中,我编写了一个代码来从外部服务中获取历史数据, 当从外部服务获取所有历史数据时,会调用通知函数,指示下载数据已完成。

问题是当我向我的 web 服务发送请求时,我的 web 服务调用该函数从外部服务获取数据并且不等待通知并返回。为了让它等待,我需要延迟。

这是一种正确的方法还是有其他替代方法,因为我无法预测 Web 服务下载数据需要多长时间。

【问题讨论】:

    标签: java web-services rest


    【解决方案1】:

    您必须创建一个“交易资源”来标识长期操作。这是一个很好的解释:

    对 REST 的常见批评之一是 因为它与 HTTP 紧密相关 (不支持客户端 回调机制),做 异步服务或通知 在 REST 上很难。那么我们如何 实现长时间运行的事务 (通常需要 异步和回调支持) 在 REST 中?

    基本思想是立即 创建一个“事务资源”以 返回给客户。虽然 实际处理发生 在后台异步, 客户端随时可以轮询 最新的“交易资源” 处理状态。让我们看一个 请求打印的示例 书,可能需要很长时间 完成

    (示例...)

    请注意,已创建响应 立即包含 URI 交易资源,甚至在之前 打印作业开始。客户可以 轮询事务资源以 获取打印的最新状态 工作。

    (从“Common REST Design Pattern”获得)。

    【讨论】:

    • 嗯,我喜欢这种方法,但我想一次性获取数据,我不希望用户在特定时间后轮询以了解状态
    • 这是标准的 Rest over HTTP 方式。但是您不需要用户手动进行调用,您可以在客户端应用程序中实现一些系统,在后台定期检查查询的状态。
    【解决方案2】:

    我建议使用缓存机制。这是历史数据,所以我想它不会有太大变化,通过不同的进程刷新缓存。

    您的 WebService 可以从缓存中读取。

    【讨论】:

      【解决方案3】:

      使用java.util.concurrent.CountDownLatch。

      1. 在调用外部服务之前创建它并将计数设置为一 (1)
      2. 等待闩锁
      3. 在锁存器上调用通知函数 countDown()。

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        相关资源
        最近更新 更多