SQS 是否会终止具有 Thread.sleep 的长时间运行作业?

And*_*row 2 amazon-sqs amazon-web-services

我有一些 java 代码在 SQS 中运行的作业中调用 Thread.sleep(100_000) 。在生产中,在睡眠期间,作业经常被终止并因失败而重新提交。在开发中我永远无法重新创建它。生产中的 SQS 是否会杀死长时间运行的作业?

E.J*_*nan 6

SQS 不会杀死工作 - 我不确定你的代码“在 SQS 中运行”是什么意思 - SQS 所做的就是假设你的工作(在 SQS 以外的地方运行)如果你不这样做,就会失败在您设置队列时设置的超时(默认可见性超时)内,不会将其标记为已完成。

您的作业要求 SQS 提供要处理的项目(要处理的消息) - 您的作业应该完成该工作,然后告诉 SQS 该作业现已完成(删除消息)。如果您没有告诉它已完成,SQS 会假设作业已失败,并将消息放回到队列中以供另一个任务处理。

如果您需要更多时间来完成任务,您可以根据需要将默认可见性超时更改为更高的值。