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

Spring Boot连接Solace JMS队列断连后无法自动重连问题求助

Solace JMS Spring Boot 自动重连配置方案

核心问题说明

原有手动实例化Connection、Session、MessageConsumer的实现方式,无法利用Solace客户端的重连能力和Spring JMS的自动恢复机制,断连后相关会话、消费者实例直接失效,也不会触发重建逻辑。
你配置的reconnectRetries=-1代表Solace客户端无限尝试重连,该场景下客户端不会将异常抛给自定义ExceptionListener,只有全部重连尝试失败后才会触发异常回调,所以你观察不到异常触发的现象。


完整调整方案

  • 保留Solace连接工厂的重连参数,补充心跳配置,更早检测断连:
@Bean
public SolConnectionFactory solConnectionFactory() throws Exception {
    SolConnectionFactory connectionFactory = SolJmsUtility.createConnectionFactory();
    connectionFactory.setHost(environment.getProperty("solace.java.host"));
    connectionFactory.setVPN(environment.getProperty("solace.java.msgVpn"));
    connectionFactory.setUsername(environment.getProperty("solace.java.clientUsername"));
    connectionFactory.setPassword(environment.getProperty("solace.java.clientPassword"));
    connectionFactory.setClientID(environment.getProperty("solace.java.clientName"));
    // 原有重连配置
    connectionFactory.setReconnectRetries(-1);
    connectionFactory.setReconnectRetryWaitInMillis(3000);
    connectionFactory.setConnectRetries(-1);
    connectionFactory.setConnectRetriesPerHost(5);
    // 新增心跳配置,10秒发送一次心跳检测连接状态
    connectionFactory.setKeepAliveInterval(10000);
    return connectionFactory;
}
  • 新增Spring JMS监听容器配置,托管连接、会话、消费者的生命周期,自动处理断连恢复:
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(SolConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
    factory.setSessionTransacted(false);
    // 开启自动启动
    factory.setAutoStartup(true);
    // 断连后每3秒尝试恢复一次
    factory.setRecoveryInterval(3000L);
    // 无限次尝试恢复
    factory.setMaxRecoveryAttempts(-1);
    return factory;
}
  • 调整消息监听器的绑定方式,删除原有手动创建Connection、Session、MessageConsumer的Bean代码:
    在你的JmsMessageListener类的消息处理方法上添加@JmsListener注解绑定队列:
@Component
public class JmsMessageListener {
    @JmsListener(destination = "${solace.message.consumer.queue}", containerFactory = "jmsListenerContainerFactory")
    public void onMessage(Message message) {
        // 原有消息处理逻辑
    }
}
  • 开启Solace客户端日志,查看重连过程:
    在application.yml或application.properties中添加日志配置:
logging.level.com.solacesystems=INFO

配置后可以在日志中看到Solace断连、重连尝试、重连成功的相关输出。


注意:不要手动管理JMS连接、会话、消费者的生命周期,全部交给Spring的监听容器托管,才能实现断连后的自动恢复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:54:09