首页 > 解决方案 > 使用 HTTP API 发布到 RabbitMQ 队列

问题描述

一直在阅读文档(https://cdn.rawgit.com/rabbitmq/rabbitmq-management/v3.7.9/priv/www/api/index.html

并且没有找到使用 HTTP API 将消息发布到队列(不是交换,队列)的方法?

那可能吗?

尽管它在生产思维方式中可能没有多大意义,但它仍然可以用于测试目的。

我基本上想模仿 RabbitMQ 管理控制台中可用的“发布消息”界面。

这有可能吗?

标签: rabbitmq

解决方案


注意:您的问题已在此处得到解答:链接

RabbitMQ 仅支持发布到交易所。这是产品的核心功能。然后,RabbitMQ 使用绑定来确定应该接收消息的队列。

您可以在此处阅读有关这些概念的信息。

当您在管理控制台中使用“发布消息”时,它使用默认绑定和默认交换。从这个文件


默认交换

在本教程的前面部分中,我们对交换一无所知,但仍然能够将消息发送到队列。这是可能的,因为我们使用的是默认交换,我们通过空字符串 ("") 来识别它。

回想一下我们之前是如何发布消息的:

channel.basic_publish(exchange='',
                      routing_key='hello',
                      body=message)

exchange 参数是交易所的名称。空字符串表示默认或无名交换:如果存在,消息将路由到具有由 routing_key 指定的名称的队列。


因此,为了看起来直接发布到队列,管理界面使用队列名称作为路由键将消息发布到默认交换器(命名amq.default或空字符串)。""您可以通过在浏览器中启用开发人员工具并观察在/api/exchanges/vhost/name/publish将消息发布到队列时进行的 HTTP 调用来亲眼看到这一点。

在您的情况下,请求将如下所示(使用 Chrome,然后右键单击publish请求并“复制为 cUrl”):

curl -4vvv -u guest:guest \
    '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"}'

注意: RabbitMQ 团队会监控邮件列表rabbitmq-users有时只会在 StackOverflow 上回答问题。


推荐阅读