如何防止其他工作人员访问当前正在处理的邮件?

时间:2016-08-07 23:19:51

标签: amazon-web-services message-queue amazon-sqs

我正在开发一个项目,该项目需要多个工作人员访问同一个队列以获取有关他们将操作的文件的信息。文件大小从几兆字节到几百千兆字节不等。出于这个原因,可见性超时似乎没有意义,因为我无法确定需要多长时间。我有几种方法,但如果有更好的方法,请告诉我。

  1. 邮件将从原始队列中删除并放入 '等待'队列。当程序完成处理文件时,它 删除它,否则消息将从队列中删除并放入 回到原来的队列。

  2. 使用数据库检查消息ID。如果消息ID是 发现,它被忽略了。否则程序开始处理 消息并将消息ID插入数据库。

  3. 提前致谢!

1 个答案:

答案 0 :(得分:1)

使用默认提供的SQS超时,但利用ChangeMessageVisibility

您可以通过多种方式指定超时:

  • 创建队列时(默认超时)
  • 检索邮件时
  • 让工作人员回叫SQS并延长超时

如果您担心自己不知道适当的处理时间,请使用适用于大多数情况的默认值,但不要让它变得如此之大以至于不必要地延迟

然后,修改您的工作人员以定期对SQS进行ChangeMessageVisiblity调用以延长超时。如果一个工作者死亡,该消息将停止扩展,它将重新出现在队列中,以便由另一个工作人员处理。

请参阅:MessageVisibility documentation