我有一个SQS FIFO队列,我们发送一堆ID供另一端处理。我们有4位工作人员正在消化该消息。工作人员收到消息后,将删除消息并存储这些ID,直到达到限制后再执行操作。
我注意到,当每个ID仅发送一次时,某些ID会被多次接收。正常吗?
答案 0 :(得分:1)
您当前的过程似乎是:
这不是推荐的使用队列的方法,因为工作进程在删除消息之后但在完成操作之前可能会失败。因此,该消息将“丢失”。
使用队列的推荐方式是:
这样,如果工作进程在处理消息时失败,它将在隐身期过后自动“重新出现”在队列中。工作人员还可以发送“仍在工作”的信号,以使消息在处理过程中长时间不可见。
Amazon SQS FIFO队列提供一次处理。这意味着一条消息将只发送一次。 (但是,如果隐藏时间在删除邮件之前到期,则会再次提供。)
您说“某些ID被多次接收”。我建议添加调试代码以尝试了解这种情况的发生,因为如果在看不见的时间内删除消息,则不应发生这种情况。