通过Management HTTP API发布RabbitMQ发布not_authorized,但可在Web UI中使用

时间:2019-04-01 05:37:14

标签: rabbitmq

我试图通过HTTP Management API将消息发布到默认交换以及其他交换,但是我总是会得到授权错误。

curl -i -u myuser:mypw -XPOST -d'{"properties":{},"routing_key":"my_key","payload":"my body","payload_encoding":"string"}' https://myinstance.rmq.cloudamqp.com/api/exchanges/vhost/myvhost/publish
HTTP/1.1 401 Unauthorized
Server: nginx/1.14.2
Date: Mon, 01 Apr 2019 05:27:10 GMT
Content-Type: application/json
Content-Length: 53
Connection: keep-alive
content-security-policy: default-src 'self'
vary: accept, accept-encoding, origin

{"error":"not_authorised","reason":"Access refused."}%       

我在自托管的RabbitMQ(通过头盔在k8s上安装)和我们的CloudAMQP实例上进行了尝试。

但是,如果我使用相同的用户登录Management Web UI,则可以将消息发布到交易所,也可以从队列中消费。 我希望Management Web UI仅使用HTTP API来执行此操作,所以我很困惑为什么通过UI执行该操作时会起作用。

另一方面,读取所有虚拟主机也可以使用HTTP API。

curl -i -u myuser:mypw https://myinstance.rmq.cloudamqp.com/api/vhosts
HTTP/1.1 200 OK

有人可以向我解释那里发生了什么吗?最让我感到困惑的是,它可以在使用同一用户pw的UI上运行。

2 个答案:

答案 0 :(得分:0)

我发现了问题,我确实使用了错误的URL路径。

对于虚拟主机:/,默认交换应为: http://myinstance.rmq.cloudamqp.com/api/exchanges/%2F/amq.default/publish

答案 1 :(得分:0)

就我而言,使用 cloudamqp 免费计划,我需要在 URL 中使用我的用户名作为 vhost:

https://myinstance.rmq.cloudamqp.com/api/exchanges/[myrandomusernamefromfreeplan]/amq.default/publish