amazon-elastic-beanstalk - 长时间运行的 Beanstalk 工作者作业和部署
问题描述
我在 Beanstalk Worker Tier 上运行长期工作。我已将 VisibilityTimeout、InactivityTimeout 和 nginx 超时设置为 10 小时 - 这按预期工作。ErrorVisibilityTimeout 设置为 30 秒,因为我希望在处理失败时立即重新传递消息。
但是,在部署时,或者如果实例失败并被 Beanstalk 替换,则不会遵守 ErrorVisibilityTimeout 并且消息在确实被重新处理时会保持飞行 10 小时。
我究竟做错了什么 ?如何在实例删除/失败后 30 秒内重新传递消息?
解决方案
可悲的是,如果实例失败,您无法更改消息超时。这是因为ErrorVisibilityTimeout
参数特定于 EB。它不是 SQS 的财产。所以 EB worker 的工作方式是 EB 实例上的 SQS 守护进程将从队列中接收消息,然后将其传递给您的应用程序。在应用程序返回 http 代码 200 OK 后,守护程序将从队列中删除该消息。
但是,如果您的应用程序返回无法处理消息,则守护程序会将消息返回到队列中。这是由守护进程使用ChangeMessageVisibility来减少消息的可见性超时,以便它再次快速变得可见,尽管默认可见性超时为 10 小时。
由于实例失败或终止,没有什么可以调用ChangeMessageVisibility
来减少可见性超时,并且消息保持默认的 10 小时超时。
推荐阅读
- javascript - 如何在触发下一个函数之前等待 API 调用数据?
- python - 在 Pandas 中,如何根据其他列的共同相互关系创建唯一 ID?
- c# - 使用c#识别docx中的第一个表并打印目录中包含表的文档
- python - 美丽的汤和请求问题它不显示任何文本输出
- azure - 通过 PowerShell 从 Azure 存储发送附件
- java - JAVA:如何在 for 循环中打印用户输入的数据?
- python - 如何通过python请求包形成http帖子
- python - 标签编码器和随机森林分类器的在线学习
- javascript - javascript vue 在 JSON 中获取值
- java - 向集合中插入多条记录时出现 mongo 超时错误 - 仅在我使用多线程时发生