Java spring mvc中的长轮询(异步)

Java spring mvc中的长轮询(异步),java,spring-mvc,asynchronous,Java,Spring Mvc,Asynchronous,我的操作需要30分钟来处理rest调用请求调用的操作。我想给客户端一个即时响应,告诉操作正在进行,处理应该在另一个线程中进行,解决这个问题的最佳方法是什么,延迟结果是唯一的方法。30分钟是很长的时间。我建议您使用websockets来推送进度更新和操作状态 由于您提供的是rest服务,另一种方法可能是立即将“已接受”(202)或“已创建”(201)返回给客户端,并提供指向另一个服务的链接,该服务将提供有关处理进度状态的更新。这样,客户端就可以自由决定是轮询服务器以获取更新,还是只向用户提供一个“

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

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

由于您提供的是rest服务,另一种方法可能是立即将“已接受”(202)或“已创建”(201)返回给客户端,并提供指向另一个服务的链接,该服务将提供有关处理进度状态的更新。这样,客户端就可以自由决定是轮询服务器以获取更新,还是只向用户提供一个“更新状态”按钮

使用消息队列(ActiveMQ、Redis)

  • 从客户端发送请求
  • 控制器在消息队列中获取请求、后处理/消息
  • 将响应发送回客户端,说明正在处理
  • 另一个线程在消息队列中查找更改/新进程
  • 执行流程-每完成一步,更新消息队列中的状态。-(已启动/正在运行/已完成/失败)
  • 您可以使用队列中进程的id每次显示进程的状态

  • Spring4.2支持服务器发送的事件