Невозможно получить сообщения из очереди 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)

Возможно, что ваши сообщения были невидимыми ("в полете"), когда вы пытались их получить.

Другие вопросы по тегам