我不是Amazon SQS服务中使用过的经验丰富的人。我必须从我不拥有的队列中读取消息,并对其进行处理,以使用一些信息来构建一个小型数据库。
到目前为止,我只有一些代码可以读取队列中的所有消息并进行处理。该脚本定期运行。
但是,最近我观察到队列中的消息量突然变得非常大。当我收到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不保证唯一性,您可以获取重复项,可以设置可见性超时,以防止在检索到消息后的一段时间内读取消息,例如等待一分钟左右,以便您有时间处理消息并从中删除消息。队列。这应该避免重复。
至于删除消息,则迭代遍历消息,对其进行处理,然后运行其中一个...
conn.delete_message(q, message)
或者
q.delete_message(message)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句