所以我使用rabbitmqs http api在兔子做一些非常基本的动作。它在大多数情况下工作得很好,但是我有一个问题,想弄清楚如何使用它来发布消息到默认的rabbitmq交换。此交换始终存在,无法删除,并且具有与路由密钥等于队列名称的每个队列的绑定。
我的问题是这个队列没有名字,或者说它的名字是一个空字符串“”。我必须用HTTP来发布带有HTTP api的消息的URL包括交换的名称。
http://localhost:15672/api/exchanges/vhost/name/publish (来源:http://hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_4/priv/www/api/index.html)
同一篇文章提到,为了使用名称为“/”的默认vhost,必须使用%2f代替vhost名称。这让我觉得应该有类似的方式来代表网址中的deafault交换。
我尝试了一些不同的东西,但没有一个起作用:
/api/exchanges/vhost//publish
/api/exchanges/vhost/""/publish
/api/exchanges/vhost/''/publish
/api/exchanges/vhost/ /publish
/api/exchanges/vhost/%00/publish
我确信我不能成为遇到这个问题的唯一人。任何帮助将非常感激。
感谢, 汤姆
答案 0 :(得分:20)
这是将邮件发布到amq.default
的方式:
http://localhost:15672/api/exchanges/%2f/amq.default/publish
有了这个身体
{"properties":{},
"routing_key":"queue_test",
"payload":"message test ",
"payload_encoding":"string"}
routing_key
是您要发布消息的队列。
以下使用chrome插件的示例:
答案 1 :(得分:0)
这里是 curl 发布消息:
curl -4vvv -u admin:admin \
'localhost:15672/api/exchanges/%2F/amq.default/publish' \
-H 'Content-Type: text/plain;charset=UTF-8' \
--data-binary '{"vhost":"/","name":"amq.default","properties":{"delivery_mode":1,"headers":{}},"routing_key":"MY-QUEUE-NAME","delivery_mode":"1","payload":"TEST","headers":{},"props":{},"payload_encoding":"string"}'
我的样品请求:
用户名:admin
密码:admin
路由密钥:sample.load.work
(我的队列)
curl --location --request POST 'localhost:15672/api/exchanges/%2F/amq.default/publish' \
--header 'Content-Type: text/plain;charset=UTF-8' \
--header 'Authorization: Basic YWRtaW46YWRtaW4=' \
--data-raw '{"vhost":"/","name":"amq.default","properties":{"delivery_mode":1,"headers":{}},"routing_key":"sample.load.work","delivery_mode":"1","payload":"TEST","headers":{},"props":{},"payload_encoding":"string"}'