春季长轮询mvc(异步)

时间:2015-09-28 07:44:13

标签: java spring-mvc asynchronous

我的操作需要30分钟来处理由休息呼叫请求调用的操作。我想给客户端立即响应告诉正在进行的操作,并且处理应该在另一个线程中发生,解决这个问题的最佳方法是什么,延迟结果是唯一的方法。

3 个答案:

答案 0 :(得分:1)

30分钟很长一段时间。我建议您使用websocket来推送进度更新和操作状态。

答案 1 :(得分:1)

由于您提供的是休息服务,另一种方法可能是立即返回“接受”状态。 (202)或'创建' (201)到客户端并提供到另一服务的链接,该服务将提供关于处理的进度状态的更新。通过这种方式,客户可以自由决定是否轮询服务器以获取更新,或者只是向用户提供“更新”状态'按钮。

答案 2 :(得分:1)

使用消息队列(ActiveMQ,Redis)。

  1. 从客户端发送请求。
  2. Controller获取请求,在消息队列中发布进程/消息。
  3. 将回复发回给客户,表示正在处理。
  4. 在消息队列中查找更改/新进程的另一个线程。
  5. 执行流程 - 每个步骤完成后,更新消息队列中的状态。 - (开始/跑步/完成/失败)。
  6. 您可以使用队列中的进程ID来显示进程的状态。