【问题标题】:SparkJava - API Taking Longer than 20 seconds. Is there a way to tell the client that I'm still processing the request?SparkJava - API 耗时超过 20 秒。有没有办法告诉客户我仍在处理请求?
【发布时间】:2017-08-08 19:17:52
【问题描述】:

我的服务 SLA 超过 20 秒。 SparkJava 中有没有办法发回 102 来告诉客户端我正在处理请求而不终止请求?

提前致谢。

【问题讨论】:

标签: spark-java


【解决方案1】:

如果您的服务器响应时间超过 20 秒,您可能希望避免让您的客户端等待那么长时间。此外,请注意 HTTP 状态 102 - 处理中 只会由符合 WebDAV 的客户端正确处理。

我建议你实现一种任务管理API,例如:

  • POST /tasks:创建任务ID,存储任务执行,启动后台进程处理任务,立即返回任务ID给客户端
  • GET /tasks/:id:获取 ID 为 :id 的任务状态 - 例如 pending | done | error - 根据状态提供适当的结果和/或错误消息;您甚至可以想象发送一些进度数据来向您的用户显示一种进度条
  • DELETE /tasks/:id:注销ID为:id的任务,删除结果,可选择取消正在运行的任务

这种方法的主要优点是它可以让您摆脱客户端和服务器超时。

主要缺点是:

  • 它比标准的请求/响应机制要复杂一些
  • 您可能需要一种持久存储来存储待处理的任务,以及一种将长时间运行的任务委托给某些执行器服务(例如事件总线、消息队列)的方法

【讨论】:

  • 感谢您的建议。最初的想法(制作一个异步任务执行 api)但不幸的是由于遗留应用程序如何与我的 API 交互而被关闭。
最近更新 更多