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

Python Boto3连接LocalStack SQS报错:指定队列在此WSDL版本下不存在

解决Boto3连接LocalStack SQS报"The specified queue does not exist for this wsdl version"错误

问题分析

从CLI输出可见,队列实际URL为http://localhost:4566/000000000000/sentinus_sqs,但Python脚本中使用的队列URL是http://localhost.localstack.cloud:4566/000000000000/sentinus_sqs,主机名不一致是核心问题——LocalStack会依据创建队列时的主机名识别队列,不同主机名对应的队列存储会被隔离。此外需确保Boto3客户端配置与CLI完全匹配。

解决方案

1. 使用CLI返回的正确队列URL

修改Python脚本中的QueueUrl为CLI列出的实际地址:

response = sqs.receive_message(
                QueueUrl = "http://localhost:4566/000000000000/sentinus_sqs",
                MaxNumberOfMessages=10,
                WaitTimeSeconds=20
            )

2. 统一endpoint与队列URL的主机名

若要使用localhost.localstack.cloud作为主机名,需确保创建队列时也使用该主机名的endpoint,后续操作保持一致:

  • 创建队列的CLI命令调整为:
aws --endpoint-url http://localhost.localstack.cloud:4566 sqs create-queue --queue-name sentinus_sqs --region us-east-1

之后Boto3脚本中使用http://localhost.localstack.cloud:4566/000000000000/sentinus_sqs作为队列URL即可正常访问。

3. 检查Boto3客户端配置

确保Boto3客户端的endpoint_url和region_name与CLI完全一致,避免配置差异引发问题:

sqs = boto3.client(
    'sqs',
    endpoint_url="http://localhost.localstack.cloud:4566", # 或http://localhost:4566,需与创建队列时的endpoint一致
    region_name="us-east-1"
)

4. 验证队列可识别性

在脚本中先调用list_queues确认队列是否能被识别,排查主机名或配置问题:

queues = sqs.list_queues()
print("Listed queues:", queues.get('QueueUrls', []))

额外提示

  • 若EC2实例未配置localhost.localstack.cloud的域名解析,可手动在/etc/hosts中添加127.0.0.1 localhost.localstack.cloud,确保域名指向本地。
  • 保持Boto3与AWS CLI版本兼容,避免API版本差异导致的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:52:41