9

默认情况下,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)

通过用 RawMessage() 替换 Message(),我可以将原始消息发送到队列而无需编码。但是如何在不解码的情况下从队列中读取消息?如果我使用以下代码:

rs = q.get_messages(1)
if rs:
    m = rs[0]
    print m.get_body()

m.get_body() 自动返回解码结果。有没有办法检索原始消息?

谢谢!

4

3 回答 3

14

如果您有兴趣从 SQS 队列中读取消息并且生产者是其他人,则在调用 get_messages() 时可能会开始看到垃圾字符。见https://github.com/boto/boto/issues/831

再次在这种情况下的解决方案是

from boto.sqs.message import RawMessage
q.set_message_class(RawMessage)
于 2013-07-05T22:19:32.623 回答
7

实际上Message类继承自RawMessage,因此它具有所有方法。这些方法之一是:

get_body_encoded()

该方法实际上是Queue.write方法在将消息内容写入SQS时使用的半私有方法。您可能不需要在正常的事件过程中调用此方法。

于 2012-05-22T09:24:17.200 回答
4

的构造函数boto.sqs.queue.Queue有一个message_class参数,您可以将其设置为RawMessage. 另一方面,我不明白为什么在传输数据之前不对数据进行编码是有意义的。

于 2012-05-22T09:26:42.117 回答