5

Das Veröffentlichen einzelner Nachrichten in einer RabbitMQ-Warteschlange kann einfach über die Benutzeroberfläche erfolgen, indem Sie die Nachricht einfach in die Benutzeroberfläche einfügen und auf die Schaltfläche "Nachricht veröffentlichen" klicken.Veröffentlichen Sie mehrere Nachrichten aus einer Datei an RabbitMQ

Wie veröffentlichen Sie einen Stapel von Nachrichten?

Ich habe eine Datei mit Nachrichten an RabbitMQ gesendet werden. Jede Zeile hat eine Nachricht.

Wie kann ich alle Nachrichten von der Datei auf meinem RabbitMQ Server veröffentlichen?

Gibt es eine Möglichkeit, es über die Befehlszeile zu tun?

Antwort

2

Sie benötigen rabbitmqadmin cli-Tool verwenden:

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

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

+1

Wie veröffentlichen diese Schnipsel die Nachrichten/Nutzlasten aus der Datei? – summerbulb

+0

versuchen Sie etw wie folgt: 'while read line; mach rabbitmqadmin publish exchange = amq.default routing_key = test payload = "$ line"; done aeryaguzov

+1

'payload =" $ line "' würde JSON \ -escapes wie '{" foo ":" \ "verschachtelte Anführungszeichen \" "}" zerlegen (weil die Shell auch \ -escapes interpretiert). Aber Sie können Payload an rabbitmqadmins stdin übergeben. –

0

Nur amqp-tool verwenden:

npm install amqp-tool -g 

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

Ich habe aktualisiert rabbitmqadmin Datei Datei Content-Publishing zu unterstützen. Versuchen Linie zu finden enthalten EXTRA_VERBS = { sowie def invoke_publish(self): und aktualisieren ihre zugehörigen Code wie folgt

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'} 
} 

und

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") 

entfernen 'populate/' + aus der folgenden Zeile, wenn Sie Datei mit absoluten Pfad zur Verfügung stellen möchten.

with open('populate/' + upload['pfile']) as f: data = f.read() 

Ohne Updates zu öffnen (...) folgender Befehl gut für mich gearbeitet, diese Datei rules.json angenommen wurde in relativem Verzeichnis "bevölkern" platziert

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

Mit rabbitmqadmin

while read -r line; do 
    echo $line | rabbitmqadmin publish exchange=amq.default routing_key=my_queue ; 
done < messages 

Die Angabe des Payload-Parameters rabbitmqadmin publish bedeutet, dass die Nutzdaten von stdin gelesen werden.

0

Ich machte eine Sache, nur um damit umzugehen (und auch Nachrichten von RMQ konsumieren). Sie können eine binäre davon aus dem releases page on github greifen. Es hat TLS-Unterstützung und ein paar andere nette Unixy-Funktionen (ENV var Unterstützung für Benutzer/Passwort, benutzerdefinierte Trennzeichen für Eingabe/Ausgabe).

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

Verwandte Themen