使用http api发布到默认的rabbitmq交换

时间:2015-09-09 18:03:45

标签: api http rabbitmq amqp

所以我使用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

我确信我不能成为遇到这个问题的唯一人。任何帮助将非常感激。

感谢, 汤姆

2 个答案:

答案 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插件的示例:

enter image description here

答案 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"}'

邮递员片段: enter image description here