rabbitmq - 使用 HTTP API 发布到 RabbitMQ 队列
问题描述
一直在阅读文档(https://cdn.rawgit.com/rabbitmq/rabbitmq-management/v3.7.9/priv/www/api/index.html)
并且没有找到使用 HTTP API 将消息发布到队列(不是交换,队列)的方法?
那可能吗?
尽管它在生产思维方式中可能没有多大意义,但它仍然可以用于测试目的。
我基本上想模仿 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 上回答问题。
推荐阅读
- django - 提交电子邮件后,如何限制 django PasswordResetView 重定向到 PasswordResetDoneView?
- javascript - 选择一个单选选项,然后再次单击相同的选项以提交表单
- swift - 从 Vapor 3 到 Vapor 4 的 LingoVapor 包
- javascript - 您可以在 Array.from 方法中包含哪些条件?
- input - 输入掩码自动聚焦到下一个字段
- sql-server - 为什么包含列未在非聚集索引中排序
- php - 如何通过 Yii2 kartik typeahead 远程 URL 从文本字段传递动态值
- javascript - 来自具有条件的数组的新数组...
- javascript - JS | 如何使用 async await 迭代地运行函数
- python - 如何托管、写入和推送文本文件到 git repo