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

使用嵌入式ActiveMQ Artemis配置STOMP端点遇连接超时求助

嵌入式ActiveMQ Artemis STOMP连接超时问题排查

问题描述

我正尝试在Java中使用嵌入式ActiveMQ Artemis配置STOMP端点。服务器已启动并能接收我的Dart客户端连接,但随后连接超时,该循环无限重复。

服务器代码

EmbeddedActiveMQ server = new EmbeddedActiveMQ();
org.apache.activemq.artemis.core.config.Configuration config = new org.apache.activemq.artemis.core.config.impl.ConfigurationImpl();

config.addAcceptorConfiguration("in-vm", "vm://0");

config.addAcceptorConfiguration("stomp", "tcp://0.0.0.0:61616?protocols=stomp");

config.setSecurityEnabled(false);
config.setPersistenceEnabled(false);    

server.setConfiguration(config);
server.start()

超时日志

[Thread-0 (ActiveMQ-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$6@2b82c43a)] WARN org.apache.activemq.artemis.core.client [] - AMQ212037: Connection failure to /192.168.1.164:46478 has been detected: AMQ229014: Did not receive data from /192.168.1.164:46478 within the 60,000ms connection TTL. The connection will now be closed. [code=CONNECTION_TIMEDOUT]

配置遗漏排查及解决办法

  • 检查STOMP协议版本兼容性:Dart STOMP客户端使用的协议版本可能与Artemis默认支持的版本不匹配。可在acceptor配置中显式指定支持的STOMP版本,修改后的acceptor URL如下:

    tcp://0.0.0.0:61616?protocols=stomp&stompVersions=1.2,1.1,1.0
    
  • 调整连接超时与心跳参数:默认60秒的连接TTL可能导致未及时检测到客户端状态,可修改服务器配置调整相关参数:

    config.setConnectionTTL(30000); // 将连接超时设置为30秒
    config.setClientFailureCheckPeriod(10000); // 每10秒检查一次客户端连接状态
    

    同时确保Dart客户端配置了心跳机制,设置heartbeatIncoming和heartbeatOutgoing参数,维持与服务器的心跳交互,避免因无数据传输触发超时。

  • 验证客户端握手流程:服务器检测到连接但未收到数据,大概率是客户端未完成STOMP协议的握手。检查Dart客户端代码是否正确发送了包含accept-version等必要参数的CONNECT帧,确保协议握手完整。

  • 排查网络传输问题:确认客户端与服务器之间的网络无丢包,防火墙或安全组未拦截STOMP帧的后续传输,保证数据能正常双向流通。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:03:24