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)

Message()をRawMessage()に置き換えることで、エンコードせずに生のメッセージをキューに送信できます。しかし、デコードせずにキューからメッセージを読み取るにはどうすればよいですか?次のコードを使用する場合:

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

m.get_body()は、デコードされた結果を自動的に返します。生のメッセージを取得する方法はありますか?

ありがとう!

4

3 に答える 3

7

実際にはMessageクラスはから継承しRawMessageているため、すべてのメソッドがあります。これらの方法の 1 つは次のとおりです。

get_body_encoded()

このメソッドは、実際には、メッセージの内容を SQS に書き込むときに Queue.write メソッドによって使用されるセミプライベート メソッドです。通常のイベントの過程でこのメソッドを呼び出す必要はないはずです。

于 2012-05-22T09:24:17.200 に答える
4

のコンストラクターにboto.sqs.queue.Queuemessage_class引数があり、これをに設定できますRawMessage。一方で、送信する前にそのデータをエンコードしないことが理にかなっている理由がわかりません。

于 2012-05-22T09:26:42.117 に答える