#rabbitmq
#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 (установлен через helm на k8s), так и на нашем экземпляре CloudAMQP.
Но если я войду в веб-интерфейс управления с тем же пользователем, тогда я смогу опубликовать сообщение на exchange, а также использовать из очереди. Я ожидаю, что веб-интерфейс Management просто использует HTTP API для выполнения этих действий, поэтому я не понимаю, почему это работает, когда я делаю это через пользовательский интерфейс.
Чтение всего виртуального хостинга, с другой стороны, работает также с HTTP API.
curl -i -u myuser:mypw https://myinstance.rmq.cloudamqp.com/api/vhosts
HTTP/1.1 200 OK
Может кто-нибудь объяснить мне, что там происходит? Что меня больше всего озадачивает, так это тот факт, что он работает в пользовательском интерфейсе с использованием того же пользователя: pw.
Ответ №1:
Я разобрался с проблемой, я использовал неправильный URL-путь.
Для vhost: /
и exchange по умолчанию это должно быть: http://myinstance.rmq.cloudamqp.com/api/exchanges///amq.default/publish
Ответ №2:
В моем случае, используя бесплатный тарифный план CloudAMQP, мне нужно было использовать свое имя пользователя в качестве vHost в URL-адресе: