SparkJava - API 花费超过 20 秒。有没有办法告诉客户我仍在处理请求?

SparkJava - API Taking Longer than 20 seconds. Is there a way to tell the client that I'm still processing the request?

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

提前致谢。

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

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

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

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

主要缺点是:

  • 它比标准 request/response 机制更复杂一些
  • 您可能需要一种持久存储来存储挂起的任务,以及一种将长 运行 任务委托给某些执行程序服务(例如事件总线、消息队列)的方法