我有一个客户端发送http请求来下载文件的场景。该文件需要动态生成,通常需要5-15秒。因此我正在研究一个解决方案,将这个操作分成3个http请求。用RabbitMQ获取长时间运行任务的结果
- 第一个请求触发生成该文件。
- 客户端轮询服务器每5秒检查文件是否已准备好下载
- 当到轮询请求的响应是积极的,在客户端开始下载文件
要实现这一点,我很期待到像RabbitMQ这样的Message Queue解决方案中。他们似乎提供了一个可靠的框架来异步运行长时间运行的任务。然而,在阅读RabbitMQ上的tutorials后,我不确定我将如何收到操作结果。
这是我心中一直:
前端服务器接收来自客户端的请求,并根据需要将其张贴消息的RabbitMQ。该前端服务器将具有3个端点
/generate
/poll
/download
当客户机调用/generate
与GET
参数说request_uid=AAA
,前端服务器将发布消息的RabbitMQ与有效载荷中的request_uid。任何免费的工作人员随后都会收到此消息并开始生成对应于AAA
的文件。
客户端将继续轮询/poll
与request_uid=AAA
检查任务是否完成。
当任务完成时,客户端将调用/download
,request_uid=AAA
希望下载文件。
问题是前端服务器的/poll
和/download
处理程序将如何知道文件生成作业的状态? RabbitMQ如何将任务结果传回生产者。还是我必须在RabbitMQ之外实现这样的机制? (消费者把它生成的文件/var/completed/AAA
)