2012-05-22 11 views
8

का उपयोग कर अमेज़ॅन एसक्यूएस से कच्चे संदेश पढ़ना डिफ़ॉल्ट रूप से, संदेश एसक्यूएस को भेजे जाने से पहले बेस 64 के साथ संदेशों को एन्कोड करता है। उदाहरण कोड:बोटो

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

RawMessage() के साथ संदेश() की जगह से, मैं एन्कोडिंग के बिना कतार में कच्चे संदेश भेज सकते हैं। लेकिन मैं कतार से संदेशों को डीकोड किए बिना कैसे पढ़ूं? यदि मैं निम्नलिखित कोड का उपयोग करता हूं:

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

m.get_body() स्वचालित रूप से डीकोडेड परिणाम देता है। क्या कच्चे संदेशों को पुनः प्राप्त करने का कोई तरीका है?

धन्यवाद!

उत्तर

3

boto.sqs.queue.Queue के निर्माता एक message_class तर्क है, जो आप RawMessage करने के लिए सेट कर सकता है। दूसरी तरफ, मुझे नहीं लगता कि यह कभी भी समझ में आने से पहले उस डेटा को एन्कोड न करने का अर्थ क्यों बना सकता है।

+1

धन्यवाद, यह काम करता है! मैं इसे डीबगिंग के लिए उपयोग करता हूं क्योंकि आप एडब्ल्यूएस एसक्यूएस कंसोल में एन्कोडेड संदेश नहीं देख सकते हैं। – eliang

+0

देर से उत्तर दें - लेकिन दूसरों के लिए - संदेश एन्कोडिंग आपके संदेश स्थान का ठोस 20% -30% ले सकता है। यदि आपको बड़े संदेशों के लिए अतिरिक्त छूट की आवश्यकता है, तो एन्कोडिंग सहायता नहीं कर सकती है। –

7

वास्तव में Message कक्षा RawMessage से विरासत में मिली है, इसलिए इसमें इसके सभी तरीके हैं। इन तरीकों में से एक है:

get_body_encoded()

इस विधि वास्तव में एक अर्ध-निजी विधि जब SQS को संदेश की सामग्री को लिख Queue.write विधि से किया जाता है। आप शायद को इस विधि को सामान्य पाठ्यक्रमों में कॉल करने की आवश्यकता नहीं है।

+0

धन्यवाद है! पता नहीं था कि ऐसी कोई विधि है। – eliang

13

यदि आप केवल एसक्यूएस कतार के संदेशों को पढ़ने में रुचि रखते हैं और निर्माता कोई और था, तो get_messages() को कॉल करते समय आप कचरा चरित्र देखना शुरू कर सकते हैं। फिर से इस मामले में देखें https://github.com/boto/boto/issues/831

समाधान,

को
from boto.sqs.message import RawMessage 
q.set_message_class(RawMessage) 
+0

यह बताता है कि जब मैं एसएनएस से एसक्यूएस को भेजे गए संदेश पढ़ता हूं तो मुझे बकवास क्यों मिल रहा है। – Zenexer

+0

मैंने संदेश को क्यू में .NET AWSSDK के साथ शरीर के लिए एक स्ट्रिंग का उपयोग करके रखा है। बोटो के साथ अजगर में इसे खींचकर कचरा पैदा होता है जब तक कि आप इसे RawMessage के रूप में नहीं खींचते। अच्छा निर्णय! – Skrymsli

संबंधित मुद्दे