Я пытался опубликовать сообщение как на обмене по умолчанию, так и на каком-то другом обмене через API управления HTTP, но всегда возвращаю ошибку авторизации.
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 (установленном через helm на k8s), так и на нашем экземпляре CloudAMQP.
Но если я войду в веб-интерфейс управления под тем же пользователем, я смогу опубликовать сообщение на бирже, а также получить его из очереди. Я ожидаю, что веб-интерфейс управления просто использует HTTP API для выполнения этих действий, поэтому я не понимаю, почему он работает, когда я делаю это через пользовательский интерфейс.
С другой стороны, чтение всех vhost также работает с HTTP API.
curl -i -u myuser:mypw https://myinstance.rmq.cloudamqp.com/api/vhosts
HTTP/1.1 200 OK
Может кто-нибудь объяснить мне, что там происходит? Что меня больше всего озадачивает, так это тот факт, что он работает в пользовательском интерфейсе с использованием одного и того же пользователя: pw.





Я понял проблему, я использовал неправильный URL-адрес.
Для vhost: / и обмена по умолчанию это должно быть:
http://myinstance.rmq.cloudamqp.com/api/exchanges/%2F/amq.default/publish
В моем случае, используя бесплатный план cloudamqp, мне нужно использовать свое имя пользователя как vhost в URL-адресе: