使用 HTTP API 发布到 RabbitMQ 队列

tis*_*sek 7 rabbitmq

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

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

那可能吗?

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

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

这有可能吗?

Luk*_*ken 7

注意:您的问题已经在这里回答:链接

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

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

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


默认交换

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

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

channel.basic_publish(exchange='',
                      routing_key='hello',
                      body=message)
Run Code Online (Sandbox Code Playgroud)

交换参数是交换的名称。空字符串表示默认或无名交换:消息将路由到具有由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"}'
Run Code Online (Sandbox Code Playgroud)

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