2015-11-02 40 views
5

只需在UI中輸入消息並單擊「發佈消息」按鈕,即可輕鬆地將單條消息發佈到RabbitMQ隊列。從文件向RabbitMQ發佈多條消息

如何發佈一批消息?

我有一個消息發送到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

嘗試像這樣:'while read line;做rabbitmqadmin發佈exchange = amq.default routing_key = test payload =「$ line」;完成 aeryaguzov

+1

'payload =「$ line」'會打破JSON \ -escapes像'{「foo」:「\」嵌套引號\「」}'(因爲您的shell也會解釋\ -escapes)。但是你可以將有效載荷傳遞給rabbitmqadmin的標準輸入。 –

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 = {以及def invoke_publish(self):線和更新相關的代碼如下

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/' +,如果你想使用絕對路徑提供文件。

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表示它從標準輸入讀取有效負載。

0

我做了一件事情,只是爲了處理這個(並從rmq消費信息)。您可以從releases page on github中獲取它的二進制文件。它具有TLS支持和其他一些不錯的unixy功能(ENV var支持用戶/密碼,用於輸入/輸出的自定義分隔符)。

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