You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用STOMP插件的RabbitMQ Docker容器拒绝浏览器连接问题排查

排查STOMP连接login_timeout错误的方案

1. 前端WebSocket端点路径错误

RabbitMQ的61613是TCP协议的STOMP端口,不支持浏览器的WebSocket连接。你需要启用RabbitMQ的STOMP over WebSocket功能,并修正前端连接地址:

  • 在RabbitMQ配置中添加WebSocket监听器:
    stomp.ws.listeners.tcp.1 = 15674
    
  • 前端brokerURL修改为正确的WebSocket端点(默认路径为/ws,不要附加/topic/,那是消息目的地而非连接地址):
    brokerURL: 'ws://localhost:15674/ws',
    

2. Docker端口映射缺失

RabbitMQ运行在Docker容器中时,必须将所需端口映射到宿主机,否则外部无法访问:
启动容器时添加端口映射参数(包含STOMP TCP端口、WebSocket端口、管理端口):

docker run -p 5672:5672 -p 15672:15672 -p 61613:61613 -p 15674:15674 rabbitmq:management

3. Spring配置与RabbitMQ STOMP冲突

你当前的Spring配置启用了内置简单消息代理,但如果要连接外部RabbitMQ STOMP代理,需修改为使用StompBrokerRelay:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketMessageBrokerConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 替换内置代理为RabbitMQ STOMP代理
        config.enableStompBrokerRelay("/topic/", "/queue/")
              .setRelayHost("localhost")
              .setRelayPort(61613)
              .setClientLogin("guest")
              .setClientPasscode("guest");
        config.setApplicationDestinationPrefixes("/app");
    }
}

如果前端直接连接RabbitMQ,无需通过Spring中转,可移除Spring的WebSocket配置。

4. 验证RabbitMQ STOMP插件状态

确保rabbitmq_stomp(基础STOMP支持)和rabbitmq_web_stomp(WebSocket支持)插件已启用:
进入容器执行命令:

rabbitmq-plugins list

若插件未启用,执行启用命令:

rabbitmq-plugins enable rabbitmq_stomp rabbitmq_web_stomp

内容的提问来源于stack exchange,提问作者cksrc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:37:10