【问题标题】:Long running Beanstalk worker jobs and deploys长时间运行的 Beanstalk 工作者作业和部署
【发布时间】:2021-03-12 06:31:20
【问题描述】:

我在 Beanstalk Worker Tier 上运行长时间的工作。我已将 VisibilityTimeout、InactivityTimeout 和 nginx 超时设置为 10 小时 - 这按预期工作。 ErrorVisibilityTimeout 设置为 30 秒,因为我希望在处理失败时立即重新传递消息。

但是,在部署时,或者如果实例失败并被 Beanstalk 替换,则不会遵守 ErrorVisibilityTimeout 并且消息在确实被重新处理时会保留 10 小时。

我做错了什么?如何在实例删除/失败后 30 秒重新传递消息?

【问题讨论】:

  • 你是如何设置 nginx 超时的?我的 .ebextensions 被忽略了 ;(
  • 改用.platform

标签: amazon-elastic-beanstalk


【解决方案1】:

遗憾的是,如果实例失败,您无法更改消息超时。这是因为ErrorVisibilityTimeout 参数特定于 EB。它不是 SQS 的财产。所以 EB worker 的工作方式是 EB 实例上的 SQS 守护进程将从队列中接收消息,然后将其传递给您的应用程序。在app返回http code 200 OK后,daemon会从队列中删除消息。

但是,如果您的应用返回未能处理消息,则守护程序会将消息返回到队列。这是由守护进程使用ChangeMessageVisibility 完成的,以减少消息的可见性超时,以便它再次快速变得可见,尽管默认可见性超时为 10 小时。

由于实例失败或终止,没有什么可以调用 ChangeMessageVisibility 来减少可见性超时,并且消息保持默认的 10 小时超时。

【讨论】:

  • 我猜是另一个很棒的 beanstalk UX 选择:(悲伤
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 2017-06-18
  • 2022-09-28
相关资源
最近更新 更多