2016-02-19 92 views
2

我正在使用boto3 AWS庫連接到他們的SQS服務。我試圖從隊列連接,讀取和寫入消息,但這似乎不起作用,並且文檔沒有幫助無法使用boto3寫信息給SQS

這裏是我的代碼,任何人都可以發現我做錯了什麼?

#Connect to a session 
session = Session(aws_access_key_id=SQSAccessKey, aws_secret_access_key=SQSSecretKey,region_name=sqsRegion) 

#Connect to a resource 
sqs= session.resource('sqs') 

queue = sqs.get_queue_by_name(QueueName=transactionQueue) 
print(queue.url) 

# Create a new message 
print 'creating new message' 
toWrite = 'hello world' 
response = queue.send_message(MessageBody=toWrite) 
print(response.get('MessageId')) 

#Reading messages in queue 
messages = queue.receive_messages() 
print 'there are %s messages in the queue' % len(messages) 
for message in messages: 
    # SQS Message 
    message.body 
    message.delete() 

發送新的消息隊列(和打印出郵件ID)後,我嘗試閱讀郵件的隊列,但它返回,就好像什麼也沒有寫它沒有新的消息。

我做錯了什麼?

謝謝!

+1

你有排隊延遲嗎?您有其他客戶端在同一時間輪詢隊列嗎? – nanestev

+0

沒有延遲也沒有其他客戶端輪詢隊列: {'ApproximateNumberOfMessagesNotVisible':'0','RedrivePolicy':'{「deadLetterTargetArn」:「」,「maxReceiveCount」:5}','MessageRetentionPeriod':'1209600', 'ApproxNumberOfMessagesDelayed':'0','MaximumMessageSize':'262144','CreatedTimestamp':'1415060940','ApproximateNumberOfMessages':'0','ReceiveMessageWaitTimeSeconds':'20','DelaySeconds':'0', – Nico

回答

2

當隊列大小很小時,您無法保證收到任何消息。這是分佈式隊列的屬性。有關更多信息,請參閱this page

+0

你喬丹,這解決了(部分)問題。我沒有意識到這一點。 – Nico

1

在這裏玩了幾件事。首先,我意外地使用了一個被另一個組件讀取的隊列(並刪除了它的消息)。我不知道這一點。此外,由於我一次只進行一次閱讀測試,所以喬丹的評論也是一個問題。