队列中的 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)
我不是 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)