1

我正在开发一个使用消息队列的应用程序。工作流程如下所示,用户提交请求--> 请求进入队列--> 处理任务--> 向用户显示输出。

我目前正在使用 Iron MQ 和可能的 Amazon SQS(取决于性能)和 Laravel PHP。我已经能够将消息发送到队列,但无法向用户显示输出。我在这里错过了什么吗?我是否需要将输出写入数据库/文件,然后连续轮询,然后将输出显示给用户?任何帮助都感激不尽

PS:这里的输出是用户特定的,取决于输入。所以每个用户都会有独特的输出。

4

1 回答 1

2

通常消息是用于后台处理,如 Antonio 所说,但您可以在后台进程完成后轮询(或使用 websockets 推送)以获取结果。基本上,只要您在单击某些内容后在网站上看到进度条或微调器,这就是正在发生的事情。

所以过程是:

  • 用户提交请求(单击按钮或执行某些操作)
  • 一条消息被放入队列(在您的情况下为 IronMQ)进行处理,并立即向用户返回响应,因此用户不必等待处理。
  • 显示给用户的页面将开始轮询以检查任务是否完成,并且通常会有一些指示正在发生某些事情(进度条或微调器或“请稍候处理”)。
  • 工作进程接收消息并处理它。
  • 完成后,worker 将结果存储在数据存储中(缓存、数据库、s3 等)
  • 正在轮询的页面将通过检查数据存储知道任务已完成,然后显示结果。

这是一篇关于各种轮询选项的好文章:http: //techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

于 2013-08-29T16:45:07.940 回答