无法使用Boto从AWS SQS队列检索消息

时间:2015-09-14 11:58:49

标签: amazon-web-services boto amazon-sqs

我的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.

我确信我在循环中遗漏了一些东西......但是找不到

1 个答案:

答案 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)

当您尝试检索邮件时,您的邮件可能不可见("在飞行中")。