5

से खरगोश एमक्यू को एकाधिक संदेश प्रकाशित करें एक खरगोश एमक्यू कतार में एकल संदेश प्रकाशित करना यूआई में आसानी से यूआई में संदेश डालकर और "संदेश प्रकाशित करें" बटन पर क्लिक करके आसानी से यूआई के साथ किया जा सकता है।फ़ाइल

आप संदेशों का बैच कैसे प्रकाशित करते हैं?

मेरे पास एक फ़ाइल है जिसमें संदेशों को RabbitMQ पर भेजा जाना है। प्रत्येक पंक्ति में एक संदेश होता है।

मैं फ़ाइल से सभी संदेशों को अपने RabbitMQ सर्वर पर कैसे प्रकाशित कर सकता हूं?

क्या कमांड लाइन से ऐसा करने का कोई तरीका है?

उत्तर

2

आप rabbitmqadmin CLI उपकरण का उपयोग करने की जरूरत है:

https://www.rabbitmq.com/management-cli.html

rabbitmqadmin publish exchange=amq.default routing_key=test payload="hello, world"

+1

कैसे इस स्निपेट फ़ाइल से संदेश/पेलोड प्रकाशित करता है? – summerbulb

+0

इस तरह की smth कोशिश करें: 'पढ़ने लाइन के दौरान; rabbitmqadmin प्रकाशित एक्सचेंज = amq.default routing_key = test payload = "$ line"; किया गया aeryaguzov

+1

'payload =" $ line "' JSON \ -escapes को तोड़ देगा जैसे {{"foo": "\" नेस्टेड उद्धरण \ ""} '(क्योंकि आप खोल \ -escapes भी व्याख्या करते हैं)। लेकिन आप rabbitmqadmin के stdin को पेलोड पास कर सकते हैं। –

0

बस amqp-tool का उपयोग करें:

npm install amqp-tool -g 

amqp-tool --host rabbitmq.local -u <user> -p <password> -q <queue name> --import file.json 
1

मैं rabbitmqadmin फ़ाइल फ़ाइल सामग्री प्रकाशन का समर्थन करने के नवीनीकृत किया है। के रूप में

EXTRA_VERBS = { 
    'publish': {'mandatory': ['routing_key'], 
       'optional': {'payload': None, 
           'pfile': None, 
           'properties': {}, 
           'exchange': 'amq.default', 
           'payload_encoding': 'string'}, 
       'json':  ['properties'], 
       'uri':  '/exchanges/{vhost}/{exchange}/publish'}, 
    'get':  {'mandatory': ['queue'], 
       'optional': {'count': '1', 'requeue': 'true', 
           'payload_file': None, 'encoding': 'auto'}, 
       'uri':  '/queues/{vhost}/{queue}/get'} 
} 

और

def invoke_publish(self): 
    (uri, upload) = self.parse_args(self.args, EXTRA_VERBS['publish']) 
    if not 'payload' and 'pfile' in upload: 
     data = sys.stdin.read() 
     upload['payload'] = b64(data) 
     upload['payload_encoding'] = 'base64' 
    elif not 'payload' in upload: 
     with open('populate/' + upload['pfile']) as f: data = f.read() 
     upload['payload'] = b64(data) 
     upload['payload_encoding'] = 'base64' 
    resp = json.loads(self.post(uri, json.dumps(upload))) 
    if resp['routed']: 
     self.verbose("Message published") 
    else: 
     self.verbose("Message published but NOT routed") 

इस प्रकार निम्न पंक्ति से 'populate/' + निकालें यदि आप निरपेक्ष पथ का उपयोग कर फ़ाइल प्रदान करना चाहते हैं EXTRA_VERBS = { के साथ-साथ def invoke_publish(self): युक्त लाइन को खोजने और उनसे संबंधित कोड को अद्यतन करने का प्रयास करें।

with open('populate/' + upload['pfile']) as f: data = f.read() 
खोलने के लिए अद्यतन के बिना

(...) निम्न आदेश मेरे लिए काम किया ठीक, यह सोचते हैं कि फ़ाइल rules.json रिश्तेदार निर्देशिका में रखा गया था "पॉप्युलेट"

python rabbitmqadmin.py publish exchange=feed-mgmt-in routing_key='#' properties='{"type":"domain-collections/rules"}' pfile="rules.json" 
5

rabbitmqadmin

while read -r line; do 
    echo $line | rabbitmqadmin publish exchange=amq.default routing_key=my_queue ; 
done < messages 
का उपयोग करना

rabbitmqadmin publish पर पेलोड पैरामीटर निर्दिष्ट नहीं करना है इसका मतलब है कि यह stdin से पेलोड पढ़ता है।

0

मैंने इसे संभालने के लिए कुछ भी किया (और आरएमक्यू से संदेशों का उपभोग करने के लिए)। आप releases page on github से इसकी बाइनरी ले सकते हैं। इसमें टीएलएस समर्थन और कुछ अन्य अच्छी यूनिक्स विशेषताएं हैं (उपयोगकर्ता/पासवर्ड के लिए ENV var समर्थन, इनपुट/आउटपुट के लिए कस्टम डिलीमीटर)।

https://github.com/joekarl/rmq-cli