Python 使用boto从Amazon SQS读取原始消息
默认情况下,boto在将消息发送到SQS之前使用Base64对消息进行编码。示例代码:Python 使用boto从Amazon SQS读取原始消息,python,amazon-web-services,boto,amazon-sqs,Python,Amazon Web Services,Boto,Amazon Sqs,默认情况下,boto在将消息发送到SQS之前使用Base64对消息进行编码。示例代码: conn = boto.connect_sqs('access_key_id', 'secret_key') q = conn.get_queue('myqueue') m = Message() m.set_body('hello!') q.write(m) 通过将Message()替换为RawMessage(),我可以不编码地将原始消息发送到队列。但是,如何在不解码的情况下读取队列中的消息?如果我使用
conn = boto.connect_sqs('access_key_id', 'secret_key')
q = conn.get_queue('myqueue')
m = Message()
m.set_body('hello!')
q.write(m)
通过将Message()替换为RawMessage(),我可以不编码地将原始消息发送到队列。但是,如何在不解码的情况下读取队列中的消息?如果我使用以下代码:
rs = q.get_messages(1)
if rs:
m = rs[0]
print m.get_body()
m、 get_body()自动返回解码结果。有没有办法检索原始消息
谢谢 实际上
Message
类继承自RawMessage
,因此它拥有它的所有方法。
其中一种方法是:
此方法实际上是Queue.write使用的半私有方法
方法将消息内容写入SQS时。你可能
在正常的事件过程中不需要调用此方法
boto.sqs.queue.queue
的构造函数有一个message_class
参数,您可以将其设置为RawMessage
。另一方面,我不明白为什么在传输数据之前不对数据进行编码是有意义的。如果您有兴趣从SQS队列中读取消息,而生产者是其他人,那么在调用get_messages()时,您可能会看到垃圾字符。
看
在这种情况下,解决方法是
from boto.sqs.message import RawMessage
q.set_message_class(RawMessage)
谢谢,它很管用!我使用它进行调试,因为您无法在AWS SQS控制台中查看编码的消息。此处的延迟回答-但对于其他人-编码消息可能占用您消息空间的20%-30%。如果你需要更多的空间来处理更大的消息,不编码可以帮助你。谢谢!我不知道有这样的方法。这解释了为什么当我阅读从SNS发送到SQS的消息时,我会变得毫无意义。我使用一个字符串作为正文,将消息与.NET AWSSDK一起放入Q中。在python中使用boto实现它会产生垃圾,除非您将其作为一条消息实现。好球!