相关疑难解决方法(0)

使用RabbitMQ获得长时间运行任务的结果

我有一个客户端发送http请求下载文件的场景.该文件需要动态生成,通常需要5-15秒.因此,我正在寻找一种解决方案,将此操作拆分为3个http请求.

  1. 第一个请求会触发文件的生成.
  2. 客户端每5秒轮询一次服务器以检查文件是否可以下载
  3. 当对轮询请求的响应为肯定时,客户端开始下载该文件

为了实现这一点,我正在寻找像RabbitMQ这样的Message Queue解决方案.它们似乎提供了一个可靠的框架来异步运行长时间运行的任务.但是在阅读了关于RabbitMQ 的教程后,我不确定如何收到操作结果.

这就是我的想法:

前端服务器接收来自客户端的请求,并根据需要将消息发送到RabbitMQ.该前端服务器将具有3个端点

/generate
/poll
/download
Run Code Online (Sandbox Code Playgroud)

当客户端/generate使用GET参数调用时request_uid=AAA,前端服务器将使用有效负载中的request_uid向RabbitMQ发送消息.任何自由工作者随后将收到此消息并开始生成对应的文件AAA.

客户端将继续轮询/pollrequest_uid=AAA检查任务完成.

任务完成后,客户端将调用/downloadrequest_uid=AAA希望下载该文件.

现在的问题是如何将/poll/download前端服务器的处理程序会知道有关文件生成作业的状态?RabbitMQ如何将任务结果传达给生产者.或者我必须在RabbitMQ之外实现这样的机制?(消费者将其结果放入文件中/var/completed/AAA)

amqp rabbitmq

5
推荐指数
1
解决办法
2964
查看次数

标签 统计

amqp ×1

rabbitmq ×1