Невозможно получить сообщения из очереди AWS SQS с помощью 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.
Я уверен, что что-то упущено в цикле.... не могу найти хотя
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)
Возможно, что ваши сообщения были невидимыми ("в полете"), когда вы пытались их получить.