【问题标题】:How to avoid Request Time Out when creating resources with REST使用 REST 创建资源时如何避免请求超时
【发布时间】:2014-06-14 15:52:33
【问题描述】:

我们有一个基于REST 的服务器,问题是某些资源需要很长时间才能创建 - 需要几分钟

问题: 是在创建资源时,我在客户端收到请求超时错误,而不是取回资源。

我想到了几种可能性

  • 使用 POST 请求创建资源并将其添加到 session/db,然后发送 GET 请求以取回资源。我不喜欢这个解决方案:它不是“REST”,我将不得不发送几个返回 404 的 get 请求,直到资源完全创建

  • 将我的服务器(Tomcat 7 和 Spring 3.2)设置为更长的会话超时 持续时间 - 我真的不知道该怎么做。

  • 有没有办法让服务器向客户端发送响应说“等待”,直到他返回最终答案? - 真的不知道该怎么做

  • 有没有办法向服务器发送一个简单地“等待”更长时间响应的请求? 真的不知道该怎么做

解决此问题的最佳做法是什么?

谢谢

【问题讨论】:

  • @Kumar 哪一个?我尝试了接受的答案及其下面的答案,但没有奏效。
  • @specialOne 请发布服务器错误日志。是会话超时/请求超时/数据库事务超时吗?上述链接中的解决方案适用于服务器请求超时问题。
  • @Kumar 这是因为我使用的是 Openshift。他们把 haproxy 放在前面,没有任何配置能力。这会引发异常。还是谢谢

标签: spring rest request tomcat7 request-timed-out


【解决方案1】:

如果您知道创建资源需要很长时间,请立即告诉客户。不要阻止他几分钟。

一种常见的方法是使用状态码202 (Accepted) 进行回答。添加带有 URI 的 Location 标头,该 URI 指向客户端可以轮询的第二个资源,以获取有关当前状态的更多信息。

第二个资源应以200 (OK) 和当前状态(“仍待处理,请在 30 秒后重试”)回答。如果第一个资源的创建完成,第二个资源应该在303 (See Other)Location 标头中的第一个资源的URI 中回答。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2014-08-30
    • 2019-03-09
    相关资源
    最近更新 更多