【问题标题】:Showing Output of request from a message queue显示来自消息队列的请求输出
【发布时间】:2013-09-01 21:40:45
【问题描述】:

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

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

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

【问题讨论】:

  • 不是您问题的答案,但它可能会对您有所帮助:vimeo.com/64703617 / blog.iron.io/2013/05/laravel-4-ironmq-push-queues-insane.html
  • 消息用于后台处理(发送邮件、图像处理、信用卡批准......),我没有看到一个工作流程,您可以让您的消息正常工作并将结果发送回您的用户直接在网页上,您可能需要轮询数据库以获取任务的状态。
  • 好的,谢谢,在那种情况下,我想我必须使用数据库。我是队列的新手,所以这可能很愚蠢。但是是否可以再使用一个队列作为输出队列,并且浏览器读取队列直到找到具有正确用户 ID 的消息并显示输出?

标签: php laravel-4 message-queue amazon-sqs iron.io


【解决方案1】:

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

所以流程是:

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

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

【讨论】:

  • 感谢您的回答。这正是我一直在寻找的
猜你喜欢
  • 2016-06-06
  • 2019-06-27
  • 2016-02-18
  • 2016-09-05
  • 2022-11-18
  • 2013-09-23
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多