【问题标题】:Bad CONNECT when trying to subscribe to message queue尝试订阅消息队列时连接错误
【发布时间】:2020-05-28 02:12:09
【问题描述】:

我对 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

有两个虚拟主机:/someVhost,还有不同的用户,例如 frontend_listener。现在我found a way 访问日志文件。

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。如何找到每个 vHost 的 URL?

我问这个是因为我认为到 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

在前端我没有收到消息或错误。

【问题讨论】:

    标签: rabbitmq amqp stompjs


    【解决方案1】:

    您还需要在 STOMP CONNECT 框架中传递主机信息..

    这是规范所说的,客户必须设置此标头

    host :客户端希望连接的虚拟主机的名称。建议客户端将此设置为建立套接字的主机名,或他们选择的任何名称。如果此标头与已知虚拟主机不匹配,支持虚拟主机的服务器可以选择默认虚拟主机或拒绝连接。

    这就是您的 CONNET 框架的外观

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

    【讨论】:

    • 规范可以在这里找到stomp.github.io/… & 其他有用的链接是rabbitmq.com/vhosts.html
    • 感谢您的回答。看来我又进了一步。我不明白旧配置确实适用于另一个实例(没有host 配置)。现在我收到一条 access_refused 消息。你也可以帮忙吗?
    • 所以在另一个实例上没有主机配置的情况下工作的原因可能是两者之一。 1. 实例有一个名为 someVhost 或 2. 名为 someVhost 的主机是默认主机。
    • 还要确保用户 fontend_listener 在主机 someVhost 上具有“configure”、“write”和“read”权限
    • 是的,默认vhost可以在rabbitmq.conf文件中定义,默认为default_vhost = /
    猜你喜欢
    • 1970-01-01
    • 2012-11-29
    • 2021-05-17
    • 1970-01-01
    • 2015-03-01
    • 2020-07-13
    • 2013-12-06
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多