繁体   English   中英

使用boto从Amazon SQS读取原始消息

[英]Reading raw messages from Amazon SQS using boto

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

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

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

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

谢谢!

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

在这种情况下再次解决的问题是

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

实际上Message类继承自RawMessage ,所以它拥有所有的方法。 其中一种方法是:

get_body_encoded()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM