代码之家  ›  专栏  ›  技术社区  ›  Tom Turner

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

  •  22
  • Tom Turner  · 技术社区  · 9 年前

    所以我使用rabbitmqs http api在rabbit中执行一些非常基本的操作。它在大多数情况下都很好,但我在想如何使用它将消息发布到默认的rabbitmqexchange时遇到了问题。此交换始终存在,无法删除,并且具有与每个队列的绑定,其路由密钥等于队列名称。

    我的问题是这个队列没有名称,或者说,它的名称是一个空字符串“”。我必须使用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名称。这让我觉得应该有一种类似的方式来表示url中的deafault交换。

    我尝试了一些不同的方法,但都没有奏效:

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

    我肯定我不是唯一一个遇到这个问题的人。任何帮助都将不胜感激。

    谢谢 汤姆

    2 回复  |  直到 9 年前
        1
  •  33
  •   Gabriele Santomaggio    9 年前

    这是将消息发布到 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

        2
  •  1
  •   VedantK    4 年前

    下面是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