2013-12-12 46 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

相关问题