Плохое СОЕДИНЕНИЕ при попытке подписаться на очередь сообщений - PullRequest
0 голосов
/ 12 февраля 2020

Я совершенно новичок в RabbitMQ и сейчас ищу ошибку конфигурации. Клиент не получает никаких сообщений от RabbitMQ, и я по возможности отлаживаю его.

Сообщения внешнего интерфейса:

Сообщение 1:

CONNECT
login:frontend_listener
passcode:xxx
accept-version:1.0,1.1,1.2
heart-beat:20000,0

Сообщение 2:

ERROR
message:Bad CONNECT
content-type:text/plain
version:1.0,1.1,1.2
content-length:30

Virtual host '/' access denied

Существует два vHosts: / и someVhost, и есть разные пользователи, такие как frontend_listener. Теперь я нашел способ для доступа к файлу журнала.

Файл журнала RabbitMQ:

2020-02-11 15:50:53.579 [warning] <0.798.0> STOMP login failed for user "frontend_listener"
2020-02-11 15:50:53.579 [error] <0.798.0> STOMP error frame sent:
Message: "Bad CONNECT"
Detail: "Access refused for user 'frontend_listener'\n"
Server private detail: none
...
2020-02-11 15:51:25.349 [info] <0.850.0> Creating user 'frontend_listener'
2020-02-11 15:51:30.374 [info] <0.857.0> Setting permissions for 'frontend_listener' in 'someVhost' to '$', '$', 'client-notification.*'
2020-02-11 15:51:54.980 [warning] <0.867.0> STOMP login failed - not_allowed (vhost access not allowed)~n
2020-02-11 15:51:54.980 [error] <0.867.0> STOMP error frame sent:
Message: "Bad CONNECT"
Detail: "Virtual host '/' access denied"
Server private detail: none
2020-02-11 15:52:56.427 [warning] <0.875.0> STOMP login failed - not_allowed (vhost access not allowed)~n

Он выглядит так, как будто права доступа неверны. Может ли кто-нибудь помочь мне правильно интерпретировать это?

Я пытаюсь прочитать: Пользователь frontend_listener хочет получить доступ к vHost /, но у него недостаточно прав (не знаю, что $ здесь имеется в виду, кроме части регулярного выражения). Дело в том, что я не знаю, правильный ли это vHost. Как узнать URL каждого vHost?

Я спрашиваю об этом, потому что считаю, что сопоставление с vHost неверно или что-то отсутствует.

Редактировать:

После добавления host: 'someVhost' к моему stomp-config.ts я смог подписаться на очереди. Теперь я получаю следующую ошибку в журнале:

2020-02-12 16:32:25.913 [error] <0.5159.1> Channel error on connection <0.5149.1> (127.0.0.1:58136 -> 127.0.0.1:15674, vhost: 'someVhost', user: 'frontend_listener'), channel 1:
operation basic.consume caused a channel exception access_refused: access to queue 'stomp-subscription-SZ3-PO1-PbZroPol-WXSQw' in vhost 'someVhost' refused for user 'frontend_listener'
2020-02-12 16:32:26.022 [error] <0.5145.1> STOMP error frame sent:
Message: access_refused

На веб-интерфейсе я не получаю сообщение или ошибку.

1 Ответ

1 голос
/ 12 февраля 2020

Вам также необходимо передать информацию о хосте в кадре STOMP CONNECT.

Это то, что сказано в спецификациях, и клиенты ДОЛЖНЫ установить этот заголовок

host: Имя виртуального хоста, к которому клиент хочет подключиться. Клиентам рекомендуется установить это имя хоста, к которому был установлен сокет, или любое другое имя по своему выбору. Если этот заголовок не соответствует известному виртуальному хосту, серверы, поддерживающие виртуальный хостинг, МОГУТ выбрать виртуальный хост по умолчанию или отклонить соединение.

Так вот как должен выглядеть ваш кадр CO NNET

CONNECT
login:frontend_listener
passcode:xxx
accept-version:1.0,1.1,1.2
host: someVhost
heart-beat:20000,0
...