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

Spring Boot 3对接Amazon SQS的JMS配置兼容问题求助

问题

使用Spring Boot 3.0.1(搭配Spring JMS 6.0.3)时,新版本JMS采用jakarta.jms.ConnectionFactory,而旧版JMS用的是javax.jms.ConnectionFactory。此前的Bean配置代码如下:

@Configuration
@EnableJms
class JmsConfiguration {

    @Autowired
    private lateinit var sqsClient: SqsClient

    @Bean
    fun sqsConnectionFactory(): SQSConnectionFactory =
        SQSConnectionFactory(ProviderConfiguration(), sqsClient)

    @Bean
    fun jmsListenerContainerFactory(): DefaultJmsListenerContainerFactory {
        val factory = DefaultJmsListenerContainerFactory()
        factory.setConnectionFactory(sqsConnectionFactory())
        factory.setDestinationResolver(DynamicDestinationResolver())
        factory.setSessionAcknowledgeMode(CLIENT_ACKNOWLEDGE)
        return factory
    }

    @Bean
    fun jmsTemplate(): JmsTemplate = JmsTemplate(sqsConnectionFactory())
}

但目前使用的SQS依赖仍基于javax实现,依赖配置如下:

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>sqs</artifactId>
    <version>2.19.19</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>amazon-sqs-java-messaging-lib</artifactId>
    <version>2.0.3</version>
</dependency>

执行factory.setConnectionFactory(sqsConnectionFactory())时报错,提示该连接工厂并非jakarta类型的ConnectionFactory,求解决办法。

解决方案
  • 升级SQS消息库到兼容Jakarta的版本
    amazon-sqs-java-messaging-lib从2.2.0版本开始支持Jakarta JMS 3.0,直接升级该依赖版本即可:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>amazon-sqs-java-messaging-lib</artifactId>
        <version>2.2.0</version> <!-- 也可使用更高的稳定兼容版本 -->
    </dependency>
    

    同时建议将AWS SDK SQS的版本升级到2.20.x及以上的稳定版,确保整体兼容性。

  • 调整代码类型声明(可选)
    升级依赖后,SQSConnectionFactory会自动实现jakarta.jms.ConnectionFactory,原代码的类型兼容问题会自动解决。如果需要更明确的类型约束,可以修改连接工厂Bean的返回类型:

    @Bean
    fun sqsConnectionFactory(): jakarta.jms.ConnectionFactory =
        SQSConnectionFactory(ProviderConfiguration(), sqsClient)
    
  • 清理旧依赖避免冲突
    检查项目中是否存在残留的javax.jms相关依赖(比如javax.jms:jms-api),这类依赖会与Jakarta包产生冲突,需要手动排除。以Maven为例:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>amazon-sqs-java-messaging-lib</artifactId>
        <version>2.2.0</version>
        <exclusions>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:50:21