【问题标题】:Java Rest service - respond accepted and process requestbehindJava Rest 服务 - 接受响应并在后面处理请求
【发布时间】:2019-03-13 16:08:47
【问题描述】:

我想编写一个接受请求的 java rest 服务,立即响应 200 或 202 并在后台处理请求。用户不必等待整个过程完成。请建议

我的休息控制器类

 @Override
  public Response generateReport(Request requst) {
     return service.generateReport(requst);
  }

服务类:

@Override
@Async
public Response generateReport(Request requst) {
     generateReport(requst);
     return Response.ok().build();
  }


public void generateReport(Request requst) {
    <!-- login to process the request. it will take 15 mins to complete -->
  }

【问题讨论】:

  • 不知道为什么要这样做,如果后台请求失败怎么办?你仍然可以使用 HEAD 来实现这些东西。
  • 当我们处理请求时,会将请求的状态存储在数据库中,用户可以在稍后的时间点看到请求的状态。因为请求可能需要 15 分钟才能完成。

标签: java rest


【解决方案1】:

您似乎想处理异步请求,这就是我要做的。

收到原始请求后,您可以创建新资源,并返回状态码 202(已接受)以及新资源的表示。

此资源的目的是让客户端跟踪异步任务的状态。设计此资源,使其表示包括请求的当前状态和相关信息,例如时间估计。

当客户端向任务资源提交 GET 请求时,根据请求的当前状态执行以下操作之一:

仍在处理 - 返回响应代码 200(OK)和任务资源的表示 当前状态。 成功完成 - 返回响应代码 303(请参阅其他)和包含 URI 的 Location 标头 显示任务结果的资源。

任务失败 - 返回响应代码 200 (OK) 并表示任务资源通知 资源创建失败。客户将需要阅读表示的正文以找出失败的原因。

【讨论】:

  • 你对此有任何参考。我尝试使用异步,它只发生在第一个请求中。
  • 用上面的代码。第一个请求效果很好。第二个请求未达到服务等级
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2021-06-30
  • 1970-01-01
相关资源
最近更新 更多