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

Sonic MQ 12.0与Spring Boot 3.3.1连接失败问题求助

Spring Boot 3.3.1 + Sonic MQ(Jakarta环境)监听器配置方案

1. 解决Jakarta依赖缺失问题

progress.message.jclient.TopicConnectionFactory是Sonic MQ的客户端类,Spring Boot 3.x完全基于Jakarta EE,必须引入Sonic MQ的Jakarta适配版客户端依赖,而非旧Java EE版本。

Maven配置(pom.xml)

<dependency>
    <groupId>com.progress</groupId>
    <artifactId>sonic-jms-client-jakarta</artifactId>
    <version>对应你的Sonic MQ Jakarta版本号</version>
    <!-- 若使用私有仓库,需补充仓库地址配置 -->
</dependency>

Gradle配置

implementation 'com.progress:sonic-jms-client-jakarta:对应你的Sonic MQ Jakarta版本号'

注意:Sonic MQ 10.x及以上版本通常提供Jakarta适配的客户端包,请确认版本兼容性。

2. 手动配置Sonic TopicConnectionFactory

Spring Boot的spring-boot-starter-jms默认适配通用JMS实现,不会自动配置Sonic的连接工厂,需手动创建Bean:

import jakarta.jms.TopicConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import progress.message.jclient.TopicConnectionFactoryImpl;

@Configuration
public class SonicJmsConfig {

    @Bean
    public TopicConnectionFactory sonicTopicConnectionFactory() {
        TopicConnectionFactoryImpl factory = new TopicConnectionFactoryImpl();
        // 设置Sonic MQ服务地址,格式:tcp://host:port
        factory.setServerUrl("tcp://你的SonicMQ地址:2506");
        // 按需配置用户名密码
        factory.setUsername("你的用户名");
        factory.setPassword("你的密码");
        return factory;
    }
}

3. 配置Jakarta版JMS监听器容器

Spring Boot 3.x使用Jakarta JMS API,需基于DefaultJakartaJmsListenerContainerFactory配置监听器容器:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJakartaJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import jakarta.jms.TopicConnectionFactory;

@Configuration
public class JmsListenerConfig {

    @Bean
    public JmsListenerContainerFactory<?> jmsTopicListenerContainerFactory(TopicConnectionFactory sonicTopicConnectionFactory) {
        DefaultJakartaJmsListenerContainerFactory factory = new DefaultJakartaJmsListenerContainerFactory();
        factory.setConnectionFactory(sonicTopicConnectionFactory);
        // 按需开启持久化订阅
        factory.setSubscriptionDurable(true);
        // 持久化订阅必须设置唯一客户端ID
        factory.setClientId("你的客户端ID");
        return factory;
    }
}

4. 编写Topic监听器

使用@JmsListener注解绑定目标Topic和容器工厂:

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import jakarta.jms.Message;
import jakarta.jms.TextMessage;

@Component
public class SonicTopicListener {

    @JmsListener(destination = "你的目标Topic名称", containerFactory = "jmsTopicListenerContainerFactory")
    public void onMessage(Message message) {
        try {
            if (message instanceof TextMessage textMessage) {
                String content = textMessage.getText();
                // 这里编写你的消息处理逻辑
                System.out.println("收到消息: " + content);
            }
        } catch (Exception e) {
            // 按需处理异常
            e.printStackTrace();
        }
    }
}

5. 常见问题排查

  • 若仍提示Jakarta类缺失,检查是否误引入旧版sonic-jms-client(Java EE版),必须用sonic-jms-client-jakarta。
  • 确认spring-boot-starter-jms已自动引入Jakarta JMS API,无需额外添加jakarta.jms:jakarta.jms-api依赖。
  • 检查Sonic MQ服务器的端口、权限配置,确保客户端能正常连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:02