【问题标题】:Amazon SQS queue: getting a response from queueAmazon SQS 队列:从队列中获取响应
【发布时间】:2012-11-15 13:55:54
【问题描述】:

图像处理系统。

用户将照片上传到 S3。图像处理应用程序从 S3 获取照片并开始对其进行处理并返回输出。

流程: Web 服务器正在向队列发送带有图像信息的 SQS 消息,图像处理服务器获取 SQS 消息并开始处理该图像。图像处理完成后,它将图像上传回 S3 并将 SQS 消息返回到队列。图像处理引擎位于 EC2 服务器上。

这是一个问题: Web服务器如何从图像处理服务器发送的队列中获取返回的SQS消息?

【问题讨论】:

    标签: amazon-s3 amazon-web-services amazon-sqs


    【解决方案1】:

    不要将图像处理视为远程过程调用,其中有请求和响应——将其视为分布式系统中不同组件执行的一系列任务。用两个队列解决这个问题:uploaded-imagesprocessed-images

    Web 服务器接受图像,将其放入 S3,并向uploaded-images 队列发送一条消息,表明需要对其进行处理。

    您的图像处理 EC2 实例等待消息到达 uploaded-images 队列,然后从 S3 检索图像,进行一些处理,并将结果放入 S3。然后他们向processed-images 队列发送一条消息,表明图像已被处理。

    您的网络服务器会轮询processed-images,并在处理完图像后执行任何他们需要做的事情:更新数据库、在短期缓存中设置一个条目以指示图像已完成处理等。

    【讨论】:

    • 很好的答案,但是网络服务器如何从已处理图像队列中检索消息,以及从上传图像队列中检索图像处理服务器?我正在使用 php,我可以将消息写入上传的图像,但是如何从处理的图像队列中获取消息?可以提供示例代码吗?
    • 嗯,一个正常的答案是运行一个后台线程或工作进程,这对于 PHP 来说都是有问题的。如果您的“上传”页面转到用户等待处理他们的图像的页面,您可以在那里轮询processed-images - 请记住,除了刚刚上传的图像之外,您可能正在处理处理过的图像。如果不了解 Web 服务器在做什么,很难就此给出具体建议。
    • 你能给我你的 Skype 或 gmail 帐户,以便我可以更详细地转达问题。谢谢
    • Willglynn 能否提供一段代码,用于从已处理图像队列中进行轮询,在示例示例或此类问题的任何其他链接中?
    • @ssd 在 PHP 中,关于如何轮询已处理图像队列,您的选择会受到一些限制。您可以每分钟运行一次 cron 作业来处理队列,因为知道该过程已完成 1 分钟以上的延迟对您来说是可以的。可以想象,您还可以有一个长时间运行的进程(即队列检查之间超时的无限循环),它更频繁地检查队列,可能会检查是否由 cron 运行并在进程因某种原因终止时重新启动。如果您有任何内存泄漏,这可能会出现问题。
    猜你喜欢
    • 2017-04-12
    • 2016-01-18
    • 2019-04-11
    • 2014-10-10
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多