SparkJava - API耗时超过20秒。有没有办法告诉客户我还在处理请求?

时间:2017-08-05 17:23:27

标签: spark-java

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

提前致谢。

1 个答案:

答案 0 :(得分:4)

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

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

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

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

主要缺点是:

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