SQS 消息未删除

我在 SQS 队列中有一小组消息,即使发送到 AWS 终端节点的删除请求返回 200 响应,这些消息也不会被删除。我的应用程序可以很好地处理消息,并且删除请求也可以正常发送。

我使用的是 Java AWS SDK 1.3.6。

还有其他人遇到过这个问题吗?


答案 1

哎呀 - 队列意外设置为 。将其更改为正值解决了问题。defaultVisibilityTimeout=0

不过,这仍然提出了一些问题:

  1. 为什么这只影响某些消息?也许有些需要更长的时间来处理?
  2. 为什么亚马逊在邮件未被删除时返回 200 个删除消息?
  3. 删除失败是因为它位于 0 秒窗口之外(在这种情况下,为什么任何删除请求都成功了?),还是因为在收到删除请求时另一个使用者已选取它们而失败?

答案 2

官方文档(版本 1.9.13)

重要提示:即使您删除了消息,也可能会收到一条消息。如果您请求删除邮件时存储邮件副本的服务器之一不可用,则这种情况在极少数情况下可能会发生这种情况。该副本将保留在服务器上,并可能在后续接收请求中再次返回给您。您应该将系统创建为幂等系统,以便多次接收特定消息不是问题。


推荐