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

Spring Cloud AWS SQS 3.0.2集成Testcontainers LocalStack遇403错误求助

问题原因

Spring Cloud AWS 3.x版本中,自动配置的SqsClient并未自动关联你自定义的AwsCredentialsProvider和AwsRegionProvider bean,导致客户端没有使用LocalStack的凭证和endpoint,请求无效从而抛出403安全令牌错误。

解决方案

显式创建SqsClient bean并配置LocalStack相关参数,确保SQS客户端使用正确的endpoint、凭证和区域:

修改测试配置类如下:

@TestConfiguration
class TestConfig {

    @Bean
    @Primary
    fun sqsClient(): SqsClient {
        localStack.start()
        return SqsClient.builder()
            .endpointOverride(localStack.getEndpointOverride(SQS))
            .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(localStack.accessKey, localStack.secretKey)))
            .region(Region.of(Region.EU_CENTRAL_1.id()))
            .build()
    }

    companion object {
        @JvmStatic
        val localStack: LocalStackContainer = LocalStackContainer(DockerImageName.parse("localstack/localstack:latest"))
            .withServices(SQS)
    }

    class SqsUrlInitializer : ApplicationContextInitializer<ConfigurableApplicationContext> {
        override fun initialize(applicationContext: ConfigurableApplicationContext) {
            localStack.start()
            // 创建测试队列
            localStack.execInContainer("awslocal", "sqs", "create-queue", "--queue-name", "single-queue")
            localStack.execInContainer("awslocal", "sqs", "create-queue", "--queue-name", "list-queue")
            // 无需再设置endpoint属性,已通过SqsClient配置
        }
    }
}
关键修改点
  • 移除原来的awsCredentialsProvider和awsRegionProvider bean,直接在SqsClient中配置凭证和区域
  • 标记sqsClient为@Primary,覆盖Spring Cloud AWS自动配置的客户端实例
  • 确保SqsClient使用LocalStack的endpoint,所有SQS操作都会指向LocalStack容器
额外建议
  • 可以指定LocalStack的具体版本(如localstack/localstack:2.3.2),避免latest版本带来的兼容性问题
  • 保留spring.main.allow-bean-definition-overriding=true,确保自定义SqsClient能覆盖自动配置的bean

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:25:19