我的python代码如下:
import json
import boto.sqs
import boto
from boto.sqs.connection import SQSConnection
from boto.sqs.message import Message
from boto.sqs.message import RawMessage
sqs = boto.connect_sqs(aws_access_key_id='XXXXXXXXXXXXXXX',aws_secret_access_key='XXXXXXXXXXXXXXXXX')
q = sqs.create_queue("Nishantqueue") // Already present
q.set_message_class(RawMessage)
results = q.get_messages()
ret = "Got %s result(s) this time.\n\n" % len(results)
for result in results:
msg = json.loads(result.get_body())
ret += "Message: %s\n" % msg['message']
ret += "\n... done."
print ret
我的SQS队列包含至少5到6条消息...当我执行此操作时...我得到输出,这是在每次运行时,此代码无法从队列中提取mssgs:
Got 0 result(s) this time.
...done.
我确信我在循环中遗漏了一些东西......但是找不到
答案 0 :(得分:1)
您的代码正在从Amazon SQS队列中检索邮件,但它似乎并没有删除它们。这意味着消息将在一段时间内不可见(由visibility_timeout
参数指定),之后它们将重新出现。期望是如果在这段时间内没有删除消息,那么它就无法处理,应该重新出现在队列上再试一次。
这里有一些代码从队列中提取消息,然后在处理后将其删除。请注意检索邮件时指定的visibility_timeout
。它使用read()
只返回一条消息:
#!/usr/bin/python27
import boto, boto.sqs
from boto.sqs.message import Message
# Connect to Queue
q_conn = boto.sqs.connect_to_region("ap-southeast-2")
q = q_conn.get_queue('queue-name')
# Get a message
m = q.read(visibility_timeout=15)
if m == None:
print "No message!"
else:
print m.get_body()
q.delete_message(m)
当您尝试检索邮件时,您的邮件可能不可见("在飞行中")。