如何通过 SQS 将任务从 EC2 卸载到工作人员

Posted

技术标签:

【中文标题】如何通过 SQS 将任务从 EC2 卸载到工作人员【英文标题】:How do I offload task from EC2 to worker via SQS 【发布时间】:2015-07-22 13:53:58 【问题描述】:

我有一个带有 Worker 设置的 Elastic bean EC2(我将它用于定期任务)。据我了解,周期性任务在 SQS 中排队并由工作人员读取并作为http://localhost HTTP Post 执行到我们在cron.yaml 中设置的 url

 - name: "db-backup"
   url: "/cron/db-backup"
   schedule: "30 21 * * *"

我们如何使用 AWS 开发工具包实现这一目标?我只能看到QueueUrlMessageBody。如何指定 URL 路径,即/cron/db-backup

$client->sendMessage(array(
   'QueueUrl'    => $queueUrl,
   'MessageBody' => 'Hello World!',
));

我应该在哪里指定路径/cron/db-backup?还是我理解错了?

【问题讨论】:

【参考方案1】:

事实证明我是部分正确的。您无法为发布到队列的单个消息设置 HTTP 路径,但您可以为所有要传递的消息设置一个公共路径,您将从那里为代码流实现调度逻辑。

您在配置 Worker 层时设置此项,并且可以随时从 Worker 配置部分更改。

如果您将 MIME 类型设置为 application/json,您将从 file_get_contents('php://input') 和如果 x-www 获取有效负载-form-urlencoded 它将是 $_POST

虽然听起来很简单,但考虑到在作为周期性任务工作时可以使用多个 http 路径 (url),我完全迷失了方向。我希望这对其他人也有帮助。

【讨论】:

以上是关于如何通过 SQS 将任务从 EC2 卸载到工作人员的主要内容,如果未能解决你的问题,请参考以下文章

AWS - 从EC2连接到SQS

如何每次将新上传的文件从 s3 下载到 ec2

如何将 SQS 队列订阅到 Java 中的 SNS 主题

从 AWS Lambda 读取 SQS 队列

AWS SQS:延迟使无法处理的消息可用

将 S3 事件订阅到 SQS 队列而不向世界公开 SQS?