我在 SQS 队列中有一小部分消息,即使发送到 AWS 端点的删除请求返回 200 响应,这些消息也不会被删除。我的应用程序很好地处理了这些消息,并且也很好地发送了删除请求。
我正在使用 Java AWS SDK 1.3.6。
有没有其他人遇到过这个问题?
我在 SQS 队列中有一小部分消息,即使发送到 AWS 端点的删除请求返回 200 响应,这些消息也不会被删除。我的应用程序很好地处理了这些消息,并且也很好地发送了删除请求。
我正在使用 Java AWS SDK 1.3.6。
有没有其他人遇到过这个问题?
糟糕 - 队列被意外设置为defaultVisibilityTimeout=0
. 将其更改为正值可以解决问题。
不过,这仍然提出了一些问题:
官方文档(1.9.13版)
重要提示:即使您已将其删除,您也可能会收到一条消息。如果在您请求删除邮件时存储邮件副本的服务器之一不可用,这种情况可能会发生。该副本保留在服务器上,并且可能会在后续接收请求时再次返回给您。您应该将系统创建为幂等的,以便多次接收特定消息不是问题。
如果您传递了您的异常,则很有可能您实际上并没有删除您的 sqs 消息,因此它被卡在“飞行中”,因为您的处理过程中可能存在错误。尝试将您的 sqs 轮询包装起来,除了这样,看看您是否有任何异常:
import traceback
import sys
try:
pollsqshere()
except Exception:
print(traceback.format_exc())
# or
print(sys.exc_info()[2])