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

SpringBoot应用Solace JMS连接失败3次后无法自动恢复问题求助

问题根因分析
  • Solace JMS客户端默认重连次数为3次,日志中attempt 3 of 3说明默认重试次数耗尽后,客户端直接终止了重连任务,对应日志输出Stale reconnect task, aborting reconnect。
  • 飞行模式场景下,全网络断开会清空本地Kerberos临时票据缓存,恢复网络后原有登录上下文已经失效,重连时用失效票据认证必然失败;而仅断开VPN不会清除Kerberos缓存,因此重连可以正常恢复。
  • 之前新增的spring.jta.bitronix.connectionfactory.ignore-recovery-failures=true是Bitronix事务恢复阶段的配置,仅作用于事务恢复的失败忽略逻辑,和Solace客户端本身的重连逻辑完全无关,因此不生效。
解决方案

1. 调整Solace客户端重连与认证配置

在现有Solace连接配置的driverProperties下新增如下参数:

# 重连最大次数,-1代表无限重试,可根据业务需要调整为指定数值
spring.jta.bitronix.connectionfactory.driverProperties.reconnectRetries=-1
# 两次重连之间的间隔时间,单位毫秒,可自行调整
spring.jta.bitronix.connectionfactory.driverProperties.reconnectRetryWaitInMillis=3000
# 开启认证上下文自动刷新,解决Kerberos票据失效后无法重连的问题
spring.jta.bitronix.connectionfactory.driverProperties.authenticationRefreshTimeoutInMillis=3600000

2. 配置JmsTemplate连接校验

避免注入的JmsTemplate持有失效连接直接使用,新增如下Spring JMS配置:

# 发送消息前校验连接有效性,失效则自动重建
spring.jms.template.session-transacted=true
# 不需要连接缓存可以直接关闭缓存,避免拿到失效连接
spring.jms.cache.enabled=false
# 如果要保留连接缓存,新增以下校验配置
spring.jms.cache.connection-checkout-timeout=5000

3. 可选:新增Kerberos票据定时刷新

如果Kerberos票据本身存在有效期限制,可在应用内新增定时任务,定期刷新本地Kerberos票据缓存,避免长时间运行后票据失效导致的连接问题。

4. 功能验证

可通过原复现路径验证:切换笔记本到飞行模式等待1分钟以上,再恢复网络,等待配置的重连间隔后发送测试消息,确认消息可正常推送、无需手动重启应用即可恢复服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:36:02