【发布时间】:2017-07-03 16:51:34
【问题描述】:
全部,
我的 Amazon Elastic Beanstalk Worker 与 SQS 结合使用时有一个非常令人不安的问题,它应该提供 cron 作业调度 - 所有这些都使用 PHP 运行。
以下场景 - 我需要在后台定期执行 PHP 脚本,该脚本最终可能会运行数小时。我看到了这个不错的介绍,它似乎完全涵盖了我的场景(AWS Worker Environments - 请参阅定期任务部分)
所以我阅读了很多操作指南,并使用 SQS 设置了一个 EBS Worker(这实际上是在创建 worker 期间自动完成的),并在我的部署包中提供了 cron 配置 (cron.yaml)。
cron 脚本被正确识别。 sqs 守护进程启动,消息被放入队列并准确地按计划触发我的 PHP 脚本。脚本运行,一切正常。
队列的配置如下: SQS configuration
但是经过一段时间的处理(脚本仍然很忙 - 不,它不是下一次计划运行^^)打开第二条消息并执行同一脚本的另一个实例,另一个,另一个...... . 正好间隔 5 分钟。
我怀疑,不知何故,消息没有从队列中删除(尽管我确保脚本返回状态 200),如果脚本运行时间过长,最终会创建新消息。
有没有办法防止产生其他消息?告诉队列或 sqs 守护进程不要创建新的飞行消息?我必须删除代码中的消息吗?虽然教程声明它应该自动发生
我只想触发脚本,从队列中删除消息并让脚本运行。请不要花哨的回退/重试机制:-)
我花了很多时间试图在互联网上找到一些东西。不成功。任何帮助表示赞赏。
谢谢
【问题讨论】:
-
前段时间有人问过这个问题,但我在 Amazon Linux AMI 2 上遇到了同样的问题,这篇文章帮助了我dev.to/rizasaputra/…
标签: php amazon-web-services cron amazon-elastic-beanstalk amazon-sqs