File 从一个文件向RabbitMQ发布多条消息
使用UI可以轻松地将单个消息发布到RabbitMQ队列,只需将消息放入UI并单击“发布消息”按钮即可 如何发布一批消息 我有一个包含要发送到RabbitMQ的消息的文件。每行有一条信息 如何将文件中的所有消息发布到RabbitMQ服务器File 从一个文件向RabbitMQ发布多条消息,file,command-line,rabbitmq,message-queue,publish-subscribe,File,Command Line,Rabbitmq,Message Queue,Publish Subscribe,使用UI可以轻松地将单个消息发布到RabbitMQ队列,只需将消息放入UI并单击“发布消息”按钮即可 如何发布一批消息 我有一个包含要发送到RabbitMQ的消息的文件。每行有一条信息 如何将文件中的所有消息发布到RabbitMQ服务器 有没有从命令行执行此操作的方法?您需要使用rabbitmqadmincli工具: rabbitmqadmin publish exchange=amq.default routing\u key=test payload=“hello,world”只需使用:
有没有从命令行执行此操作的方法?您需要使用
rabbitmqadmin
cli工具:
rabbitmqadmin publish exchange=amq.default routing\u key=test payload=“hello,world”
只需使用:
npm安装amqp工具-g
amqp工具--主机rabbitmq.local-u-p-q--导入文件.json
我已经更新了rabbitmqadmin文件以支持文件内容发布。尝试查找包含EXTRA\u VERBS={
以及def invoke\u 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'}
}
及
如果要使用绝对路径提供文件,请从以下行中删除'populate/'+
with open('populate/' + upload['pfile']) as f: data = f.read()
假设文件rules.json被放置在相对目录“populate”中,那么在不更新open(…)的情况下,下面的命令对我很有效
使用rabbitmqadmin
while read -r line; do
echo $line | rabbitmqadmin publish exchange=amq.default routing_key=my_queue ;
done < messages
读取时-r行;执行
echo$line | rabbitmqadmin publish exchange=amq.default routing_key=my_queue;
完成<消息
未将有效负载参数指定为
rabbitmqadmin publish
意味着它从stdin读取有效负载。您可以使用curl和rabbitmq api:
curl -u login:pass -i -H "content-type:application/json" -X POST http://localhost:15672/api/exchanges/%2Fvhost/exchange/publish -d'{"properties":{},"routing_key":"","payload":"you message","payload_encoding":"string"}'
这是一条消息的示例,通过类比,您可以编写一个脚本,作为您也可以使用的looseend答案的变体 如果您有一个大文件,这将产生更好的性能
cat messages | parallel -j 100 \
./rabbitmqadmin -H $RABBITMQ_HOST \
-u $RABBITMQ_USERNAME \
-p $RABBITMQ_PASSWORD \
publish exchange=amq.default \
routing_key=myqueue \
payload="{}"
这将使用100个作业运行。如果不需要,请忽略主机和凭据。此代码段如何从文件中发布消息/有效负载?请像这样尝试smth:
读取行时;do rabbitmqadmin publish exchange=amq.default routing_key=test payload=“$line”;done
有效负载=“$line”
会破坏JSON \-转义,比如{“foo”:“\“嵌套引号\”}
(因为您的shell也解释\-转义)。但是您可以将负载传递给rabbitmqadmin的stdin。是的,正如前面所指出的,rabbitmqadmin
要求输入为文本(由于来自shell的输入),更不用说它使用http api进行发布/使用,因此对于更大的使用,它的速度往往非常慢。我尝试了获取(节点:24786)MaxListenerSexceedawerning:检测到可能的EventEmitter内存泄漏。添加了11个错误侦听器。使用emitter.setMaxListeners()为了增加limitI也尝试过,但即使提供了路由密钥,routingKey也会出现错误。使用此选项,速度快了5倍:)
while read -r line; do
echo $line | rabbitmqadmin publish exchange=amq.default routing_key=my_queue ;
done < messages
curl -u login:pass -i -H "content-type:application/json" -X POST http://localhost:15672/api/exchanges/%2Fvhost/exchange/publish -d'{"properties":{},"routing_key":"","payload":"you message","payload_encoding":"string"}'
cat messages | parallel -j 100 \
./rabbitmqadmin -H $RABBITMQ_HOST \
-u $RABBITMQ_USERNAME \
-p $RABBITMQ_PASSWORD \
publish exchange=amq.default \
routing_key=myqueue \
payload="{}"