Publishing to the default rabbitmq exchange using the http api
Asked Answered
D

2

24

So I am using rabbitmqs http api to do some very basic actions in rabbit. It works great in most situations but I am having an issue figuring out how to use it to publish a message to the default rabbitmq exchange. This exchange is always present, cannot be deleted and has a binding to every queue with a routing key equal to the queue name.

My problem is that this queue does not have a name, or rather, it's name is an empty string "". And the URL I have to use to publish this message with the HTTP api includes the name of the exchange.

http://localhost:15672/api/exchanges/vhost/name/publish (Source: http://hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_4/priv/www/api/index.html)

The same article mentions that in order to use the default vhost which has a name of "/", you must use %2f in place of the vhost name. This makes me think there should be a similar way to represent the deafault exchange in the url.

I tried a few different things and none of them worked:

/api/exchanges/vhost//publish
/api/exchanges/vhost/""/publish
/api/exchanges/vhost/''/publish
/api/exchanges/vhost/ /publish
/api/exchanges/vhost/%00/publish

I'm sure I can't be the only person that has run into this issue. any help would be much appreciated.

thanks, Tom

Duley answered 9/9, 2015 at 18:3 Comment(0)
S
36

This is the way to publish a message to amq.default:

http://localhost:15672/api/exchanges/%2f/amq.default/publish

with this body

{"properties":{},
 "routing_key":"queue_test",
 "payload":"message test ",
 "payload_encoding":"string"}

routing_key is the queue where you will publish the message.

Following an example using a chrome plug-in:

enter image description here

Subordinate answered 9/9, 2015 at 18:17 Comment(5)
How do you add message publish headers?Felonious
If you create the exchange using the publisher of the demo code of the RabbitMQ example codes, and the automatic created queue has a strange name, just use "routing_key":"" on that JSON body.Spittle
can you help me with source document so I can dive in moreBut
Just to add the obvious, to publish to another vhost, replace the %2f part with vhost nameGreenaway
If you need to send a custom header, add it to properties: {"properties":{ "header": {"myheader": value} } ...}Testator
B
3

Here is curl to publish Message:

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

My Sample Request:

Username: admin
Password: admin
Routing Key: sample.load.work (My queue)

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

Postman Snippet: enter image description here

But answered 15/4, 2021 at 14:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.