2013-12-12 103 views
4

因此,我使用python和BOTO來訪問我的AWS SQS。我可以從AWS儀表板中看到SQS中的一些消息。但是,當我試圖通過python獲取這些消息時,通過的字符只是亂碼。任何想法發生了什麼?在AWS SQS中使用Python BOTO,獲取無意義字符

conn = boto.sqs.connect_to_region("us-east-1") 
q = conn.get_queue('my-worker-queue') 
print q 
#read from message queue 
message = q.read(60) 
print message 
print message.get_body() 

鑑於上面的代碼中,我得到如下:

Queue(https://queue.amazonaws.com/247124526695/my-worker-queue) 
<boto.sqs.message.Message instance at 0x16f31b8> 
??e??b?+??- 

在消息隊列中的文字是:

hello this is a test 

回答

6

我想原因是base64解碼問題,因爲boto使用base64進行消息編碼和解碼。你可以嘗試使用get_body_encoded method

print message.get_body_encoded() 

其他選項是轉換爲RawMessage

from boto.sqs.message import RawMessage 
q.set_message_class(RawMessage) 

更新

是的,它是,它成爲你的測試用例明確:

>>> print 'hello this is a test'.decode('base64') 
??e??b?+??- 
+0

這適用於這個簡單的消息,但如果我切換到JSON格式,比如說:'{「myMessage」:「你好,這是一個測試」}'使用get_body_encoded()去掉{,「和: – user602525

+0

@ user602525從boto問題跟蹤器中查看其他選項。但是我猜這個代碼之外的sqs交互中必定存在其他問題,因爲get_body_encoded應該返回原始值,因爲它是從隊列中讀取(字節)的。 – alko

+0

RawMessage的工作,謝謝 – user602525

相關問題