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

使用Go语言go-stomp库调用stomp.Dial()建立STOMP连接失败求助

问题

使用go-stomp库的stomp.Dial()函数建立STOMP连接时失败,尝试先通过net.Connect再调用stomp.Connect等方法后,仍出现相同错误:

read tcp: wsarecv: An existing connection was forcibly closed by the remote host

相关代码片段:

ticker := time.NewTicker(time.Second * 5)
defer ticker.Stop()
for ; ; <-ticker.C {
    st, err := stomp.Dial("tcp", conn.ConfigStr)
    if err != nil {
        log.Println("Stomp connect error", err.Error())
        continue
    }
    log.Println("CONNECTED TO ", conn.ProviderName)
}
错误原因分析
  • 服务器端拒绝连接:服务器未监听指定TCP端口,或防火墙/安全组拦截了客户端连接请求,导致连接建立后被强制关闭。
  • STOMP协议版本不兼容:客户端使用的STOMP协议版本与服务器支持版本不匹配,服务器在握手阶段直接断开连接。
  • 连接参数错误:conn.ConfigStr格式不正确(比如未指定正确的host:port,或包含无效参数),服务器无法识别请求而关闭连接。
  • 服务器资源/配置限制:服务器达到最大连接数限制,或存在连接超时、认证失败等配置,导致新连接被强制断开。
解决方法
  • 检查网络与服务器连通性:
    1. 用telnet或nc命令测试目标端口可访问性,比如telnet your-server-ip 61613(默认STOMP端口),确认端口开放且服务器在监听。
    2. 排查客户端与服务器间的防火墙、安全组规则,确保允许客户端IP访问目标STOMP端口。
  • 匹配STOMP协议版本:
    调用stomp.Dial时指定服务器支持的协议版本,示例:
    st, err := stomp.Dial("tcp", conn.ConfigStr, stomp.Versions(stomp.V1_2, stomp.V1_1))
    
    先确认服务器支持的STOMP版本,再在客户端指定对应版本。
  • 验证连接参数正确性:
    确保conn.ConfigStr是标准host:port格式(比如"localhost:61613"),若需认证,在Dial时添加认证选项:
    st, err := stomp.Dial("tcp", conn.ConfigStr, stomp.ConnOpt.Login("username", "password"))
    
  • 检查服务器配置:
    查看服务器STOMP服务日志,确认是否因连接数超限、认证失败、超时设置等原因拒绝连接,调整对应配置后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:50:39