使用HTTP API发布到RabbitMQ队列

时间:2018-11-17 12:19:19

标签: rabbitmq

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

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

有可能吗?

尽管它在生产心态中可能无济于事,但它仍然可以用于测试。

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

这有可能吗?

3 个答案:

答案 0 :(得分:1)

注意:herelink

您的问题已得到回答

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

您可以阅读关于here的这些概念。

在管理控制台中使用“发布消息”时,它将使用默认绑定和默认交换。来自this document


默认交换

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

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

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

交换参数是交换的名称。空字符串表示默认或无名称交换:如果消息存在,则将消息路由到由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团队监视the rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。

答案 1 :(得分:0)

对于那些对带有 id 数组的 Intellij IDEA HTTP 客户端语法感兴趣的人

[
  {"id": "83d6e4dc-0478-42da-8da0-65b508530a43"},
  {"id": "08d3e147-79c4-4b91-be7c-b1cc86e21278"}
]

POST http://localhost:15672/api/exchanges/%2F/amqp.myexchange/publish
Authorization: Basic guest guest
Content-Type: application/json

{
  "vhost": "/",
  "name": "amqp.myexchange",
  "properties": {
    "delivery_mode": 2,
    "headers": {},
    "content_type": "application/json"
  },
  "routing_key": "",
  "delivery_mode": "2",
  "payload": "[{\"id\":\"83d6e4dc-0478-42da-8da0-65b508530a43\"},{\"id\":\"08d3e147-79c4-4b91-be7c-b1cc86e21278\"}]",
  "headers": {},
  "props": {
    "content_type": "application/json"
  },
  "payload_encoding": "string"
}

答案 2 :(得分:-1)

C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin>
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin>curl -i -u guest:guest localhost:15672/api/exchanges/%2F/amq.default/publish -H 'content-type:application/json" -d '{"vhost":"/","name":"amq.default","properties":{"delivery_mode":1,"headers":{}},"routing_key":"TEST,"delivery_mode":"1","payload":"TEST","headers":{},"props":{},"payload_encoding":"string"}'
HTTP/1.1 405 Method Not Allowed
allow: POST, OPTIONS
content-length: 0
content-security-policy: default-src 'self'
date: Fri, 06 Dec 2019 14:03:08 GMT
server: Cowboy
vary: origin