2015-12-10 7 views
7

मेरे पास एक वेब प्रबंधन प्लगइन स्थापित के साथ RabbitMQ 3.4.2 instance है।वेब प्लगइन का उपयोग करके RabbitMQ को JSON पेलोड कैसे भेजें?

जब मैं पाइथन के kombu कतार पैकेज का उपयोग कर कतार में {'operationId': 194} संदेश को धक्का देता हूं, तो संदेश दूसरे शब्द को एक शब्दकोश के रूप में पढ़ा जाता है।

हालांकि, जब मैं वेब कंसोल का उपयोग कर संदेश भेजने:

enter image description here

मैं प्राप्त अंत पर निम्न त्रुटि:

operation_id = payload['operationId'] 
TypeError: string indices must be integers 

मैं एक content-type हेडर को जोड़े की कोशिश की है और संपत्ति, बिना किसी सफलता के।

चूंकि पाठक कोड समान है, इसका मतलब है कि वेब प्रेषक भेजे गए संदेश को JSON/शब्दकोश पेलोड के रूप में चिह्नित नहीं करता है, और इसलिए इसे दूसरे छोर पर एक स्ट्रिंग के रूप में पढ़ा जाता है।

कोई विचार है कि एक संदेश को JSIT संदेश के रूप में कैसे RabbitMQ वेब कंसोल का उपयोग करके चिह्नित किया जाए?

उत्तर

13

मुझे content-type (एक हाइफ़न के बजाय अंडरस्कोर) के बजाय content_type का उपयोग करना पड़ा।

यह एक बहुत ही संदिग्ध डिजाइन निर्णय है, क्योंकि मानक सभी जानते हैं content-type

enter image description here

+0

यह एक HTTP हैडर नहीं है ... यह उस कुंजी से अलग है और इसके गुणों के लिए अंडरस्कोर का उपयोग करने के लिए खरगोश एमक्यू सम्मेलन का पालन करना है। – Jakub

1

आपको आउटपुट को डी-क्रमबद्ध करने की आवश्यकता है।

import json 
payload = json.loads(payload) 
operation_id = payload['operationId'] 

इसके अतिरिक्त {'operationId': 194} मान्य JSON नहीं है। हालांकि ऐसा लगता है कि आप स्क्रीनशॉट में डबल कोट्स का उपयोग करते हैं, लेकिन सुनिश्चित करें कि आप सिंगल कोट्स को डबल कोट्स से बदल दें।

संपादित करें: तो आप सही हैं, कोम्बू को इसे संभालना चाहिए। कोड को देखते हुए यह संभव है कि हेडर केस-संवेदी है। Content-Type से content-type से गुण शीर्षलेख बदलें।

+0

अजीब बात यह है कि अजगर कोड से भेजे गए संदेशों को प्राप्त अंत पर कोई अक्रमांकन की आवश्यकता है, इसलिए, मुझे लगता है कि कुछ मेटाडेटा है जो मेरे लिए नौकरी करता है। जब मैं '{'ऑपरेशन आईडी': 1 9 4} भेजता हूं, तो इसे दूसरे छोर पर एक शब्दकोश के रूप में प्राप्त किया जाता है। वेब कंसोल से भी भेजते समय मैं यह व्यवहार करना चाहता हूं। –

+0

@AdamMatan आप सही हैं। मुझे लगता है कि हेडर नाम केस-संवेदी होने के नाते यह मूर्खतापूर्ण हो सकता है। – eandersson

+0

मुझे उस पर उठाया जाना चाहिए था। मेरे पास अपनी amqp लाइब्रेरी में '' '_''' का उपयोग करके एक ही कार्यान्वयन है। https://github.com/eandersson/amqp-storm/blob/master/amqpstorm/message.py#L208 – eandersson

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