Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用boto从Amazon SQS读取原始消息_Python_Amazon Web Services_Boto_Amazon Sqs - Fatal编程技术网

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

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(),我可以不编码地将原始消息发送到队列。但是,如何在不解码的情况下读取队列中的消息?如果我使用

默认情况下,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(),我可以不编码地将原始消息发送到队列。但是,如何在不解码的情况下读取队列中的消息?如果我使用以下代码:

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实现它会产生垃圾,除非您将其作为一条消息实现。好球!