是否可以多次从AWS SQS加载同一条消息

时间:2019-06-04 21:39:59

标签: amazon-web-services amazon-sqs

我有一个SQS FIFO队列,我们​​发送一堆ID供另一端处理。我们有4位工作人员正在消化该消息。工作人员收到消息后,将删除消息并存储这些ID,直到达到限制后再执行操作。

我注意到,当每个ID仅发送一次时,某些ID会被多次接收。正常吗?

1 个答案:

答案 0 :(得分:1)

您当前的过程似乎是:

  • 工作人员从队列中提取(接收)消息
  • 它删除邮件
  • 它对邮件执行操作

这不是推荐的使用队列的方法,因为工作进程在删除消息之后但在完成操作之前可能会失败。因此,该消息将“丢失”。

使用队列的推荐方式是:

  • 从队列中拉出一条消息(使消息暂时不可见)
  • 处理消息
  • 删除消息

这样,如果工作进程在处理消息时失败,它将在隐身期过后自动“重新出现”在队列中。工作人员还可以发送“仍在工作”的信号,以使消息在处理过程中长时间不可见。

Amazon SQS FIFO队列提供一次处理。这意味着一条消息将只发送一次。 (但是,如果隐藏时间在删除邮件之前到期,则会再次提供。)

您说“某些ID被多次接收”。我建议添加调试代码以尝试了解这种情况的发生,因为如果在看不见的时间内删除消息,则不应发生这种情况。