我对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的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
在前端我没有消息或错误。
答案 0 :(得分: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