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

Unable to retrieve Messages from AWS SQS queue using Boto

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

我确定我在循环中遗漏了一些东西....虽然找不到

您的代码正在从 Amazon SQS 队列中检索消息,但它似乎并没有删除它们。这意味着消息将在一段时间内不可见(由 visibility_timeout 参数指定),之后它们将重新出现。期望是如果一条消息在这段时间内没有被删除,那么它处理失败,应该重新出现在队列中重试。

下面是一些从队列中提取消息,然后在处理后将其删除的代码。请注意检索消息时指定的 visibility_timeout。它使用 read() 来简单地 return 一条消息:

#!/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)

您的消息可能在您尝试检索时不可见 ("in-flight")。