Spring AWS SQS连接LocalStack提示队列不存在,AWS CLI可正常访问该队列
解决方案
该问题核心原因为Spring Cloud AWS仅传入队列名时,自动生成的队列URL与Localstack实际队列URL不匹配,可按以下步骤修复:
方案1(最快生效):直接使用完整队列URL配置
调整application.properties中的队列配置,将队列名替换为你调用CLI时使用的完整队列URL:aws.queues.event=http://localhost:4566/000000000000/EVENTS_DEV@SqsListener原生支持直接读取完整队列URL,无需修改其他代码。方案2(保留队列名配置):补充SQS客户端自定义配置
你当前的配置类没有手动注入适配Localstack的SQS客户端,导致默认客户端构造队列URL规则不符合Localstack要求,在AWSConfig类中补充以下Bean即可:@Bean public AmazonSQSAsync amazonSQSAsync() { return AmazonSQSAsyncClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:4566", "sa-east-1")) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("test", "test"))) .build(); }Localstack默认不需要校验真实凭证,此处accessKey和secretKey填任意非空值即可。
额外校验项
如果你使用的是Spring Cloud AWS 2.3及以上版本,原配置前缀cloud.aws.*已经废弃,需替换为spring.cloud.aws.*,避免配置不生效导致客户端默认请求公网AWS环境,自然无法找到本地创建的队列。
内容的提问来源于stack exchange,提问作者Renato Ramos Nascimento
相关产品推荐
相关产品推荐

