2012-05-22 14 views
8

Varsayılan olarak, Boto iletileri SQS'ye gönderilmeden önce Base64 ile kodlar. Örnek kod:boto kullanarak gerçek zamanlı iletileri SQS boto kullanarak

conn = boto.connect_sqs('access_key_id', 'secret_key') 
q = conn.get_queue('myqueue') 
m = Message() 
m.set_body('hello!') 
q.write(m) 

RawMessage() ile bir mesajı() değiştirerek, bir kodlama olmadan sıraya ham iletileri gönderebilir. Ancak, kod çözülmeden sıradaki iletileri nasıl okurum? Aşağıdaki kodu kullanırsanız: m.get_body(), kodu çözülen sonucu otomatik olarak döndürür m.get_body(), . Ham iletileri almanın bir yolu var mı?

Teşekkürler!

cevap

3

boto.sqs.queue.Queue yapıcısı sen RawMessage ayarlı olabilecek bir message_class parametreye sahiptir. Öte yandan, bu verileri iletmeden önce kodlamak için neden mantıklı olduğunu anlamıyorum. durumda

+1

Teşekkürler, işe yarıyor! Hata ayıklama için kullanıyorum çünkü kodlanmış mesajı AWS SQS konsolunda göremiyorsunuz. – eliang

+0

Burada geç cevap - ama diğerleri için - mesajların kodlanması mesaj alanınızın% 20 -% 30'unu alabilir. Daha büyük mesajlar için bu ekstra boşluğa ihtiyacınız varsa, kodlama yardımcı olamaz. –

7

Aslında Message sınıf RawMessage devralır, bu yüzden 's yöntemlerden hepsi var. Bu yöntemlerden biri şudur:

get_body_encoded()

Bu yöntem gerçekten SQS'in için iletinin içeriğini yazarken Queue.write yöntemle kullanılan yarı-özel bir yöntemdir. Muhtemelen , normal yöntem olaylarında bu yöntemi çağırmanız gerekmeyecektir.

+0

teşekkürler olduğunu! Böyle bir yöntem olduğunu bilmiyordum. – eliang

13

sadece SQS kuyruğuna kapalı mesajları okumak için ilgilenen ve yapımcı başkası, sen çöp karakterini görmeye başlayabilirsiniz zaman çağrı get_messages(). Yine bu durumda https://github.com/boto/boto/issues/831

Çözüm Bkz ,

için
from boto.sqs.message import RawMessage 
q.set_message_class(RawMessage) 
+0

SNS'den SQS'ye gönderilen iletileri okuduğumda neden anlamsız olduğumu açıklıyor. – Zenexer

+0

İletiyi, gövde için bir dize kullanarak .NET AWSSDK ile Q içine koydum. Boto ile python içinde çekerek, RawMessage olarak çıkardığınız sürece çöp üretir. İyi arama! – Skrymsli