队列中的 Amazon SQS 重复消息

Amazon SQS duplicated messages in queue

我不是 Amazon SQS 服务的使用经验。我必须从我不拥有的队列中读取消息并处理它们,从而创建一个包含一些信息的小型数据库。

到目前为止,我只有一些代码可以读取队列中的所有消息并进行处理。该脚本定期 运行ning。

但是,最近我观察到队列中的消息量突然变得很大。当我获取 10000 条样本消息时,我发现大约有 6000 条消息是重复的。

我对这种行为的突然变化感到困惑(到目前为止我没有观察到重复的消息)。队列似乎永远不会 运行。

这是我用来从队列中读取所有消息的代码。

conn = boto.sqs.connect_to_region(
    'myregions',
    aws_access_key_id='myacceskey',
    aws_secret_access_key='secretAccesKey')
q = boto.sqs.queue.Queue(connection=conn, url='outputQueue')

rs = q.get_messages(10)
all_messages = []
while len(rs) > 0:
    all_messages.extend(rs)
    print (len(all_messages))
    rs = q.get_messages(10)

谁能解释一下为什么我突然收到重复的消息?我无权查看队列有多大,如何获取队列中的所有消息?我做对了吗?

处理完队列中的消息后,您需要发回消息已处理并应将其删除的通知。如果不这样做,将只意味着消息位于队列中并被重新获取,直到它达到获取限制并被发送到死信队列或过期。

SQS 不保证唯一性,您可以得到重复项,您可以设置一个 Visibility Timeout 以防止消息在检索后的一段时间内被读取,例如一分钟左右,让您有时间处理消息并将其从队列中删除。这应该避免重复。

至于删除消息迭代消息,处理它们然后 运行 或者...

conn.delete_message(q, message)

q.delete_message(message)