我正在使用Rails构建API,其中请求进入并且它们需要由在不同服务器上运行的工作者群集执行(这些工作者调用远程API并解析数据等...)。我将使用Sidekiq或Resque来处理它的排队/处理。
我的问题是客户端需要等待这种情况发生,并且控制器需要在客户端完成后将响应返回给客户端。我如何在控制器中处理这个?我们正在使用redis后端,因此我正在考虑订阅pub / sub频道并等待工作人员发布状态消息。如果控制器没有及时收到消息,则控制器将等待设定的时间段,然后向客户端返回“稍后再检查”响应。实现这一目标的最佳方式是什么,还是有更好的解决方案?
答案 0 :(得分:2)
不要让您的客户等待!如果您为长时间运行的作业设置控制器块,则会出现很多问题:
使用Sidekiq或Resque的部分原因是避免在http请求期间大量提升的控制器。
相反,后台作业应将其状态报告给数据库。然后,Web服务器应查询并从数据库返回客户端的最新状态。
如果客户需要更多即时反馈,您可以: